更多示例和模式¶下面是另一个spider,它演示回调和以下链接,这次是为了抓取作者信息: import scrapy
class AuthorSpider(scrapy.Spider):
name = 'author'
start_urls = ['http://quotes.toscrape.com/']
def parse(self, response):
author_page_links = response.css('.author + a')
yield from response.follow_all(author_page_links, self.parse_author)
pagination_links = response.css('li.next a')
yield from response.follow_all(pagination_links, self.parse)
def parse_author(self, response):
def extract_with_css(query):
return response.css(query).get(default='').strip()
yield {
'name': extract_with_css('h3.author-title::text'),
'birthdate': extract_with_css('.author-born-date::text'),
'bio': extract_with_css('.author-description::text'),
}
这个蜘蛛将从主页开始,它将跟踪所有指向作者页面的链接,调用 在这里,我们将回调传递给 这个 这个蜘蛛展示的另一个有趣的事情是,即使同一作者引用了很多话,我们也不需要担心多次访问同一作者页面。默认情况下,scrappy过滤掉对已经访问过的URL的重复请求,避免了由于编程错误而太多地访问服务器的问题。这可以通过设置进行配置 希望到目前为止,您已经很好地了解了如何使用scrappy跟踪链接和回调的机制。 作为另一个利用以下链接机制的蜘蛛示例,请查看 另外,一个常见的模式是使用:ref:`trick将其他数据传递给回调<topics-request-response-ref-request-callback-arguments>`来构建包含来自多个页面的数据的项目。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-11-21 20:27 , Processed in 0.040815 second(s), 17 queries .