在Scrapy Tutorial中,爬行器从class="next"
中提取下一页链接并对其进行爬网-
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://quotes.toscrape.com/page/1/',
]
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('span small::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
next_page = response.css('li.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, callback=self.parse)
就我而言,我在从Web服务器下载的文件中找不到下一页链接,但我知道格式是response.url
与/page/[page number]/
连接的。不产生引号的请求页面仍然返回一个response
,例如-No quotes found!。由于下一页的数量通常少于20页,我可以通过将spider的最后3行替换为-
for page_num in range(2, 20):
yield response.follow(f"/page/{page_num}/", callback=self.parse)
但是,这会迫使爬行器请求不产生引号的页面(例如http://quotes.toscrape.com/page/11到20)。在请求不产生引号的第一页后,如何调整spider以终止page_num
循环?(例如http://quotes.toscrape.com/page/11)
伪码
page_num = 2
while (quotes are yielded from the response):
yield response.follow(f"/page/{page_num}/", callback=self.parse)
page_num += 1
您可以使用
response.css('..')
的结果作为下一页的条件。在这种情况下,您的代码如下所示:
相关问题 更多 >
编程相关推荐