scrapy分页抓取网页(Scrapy跳转到倒数第二页(基于示例地址地址)吗?)
优采云 发布时间: 2021-10-25 18:10scrapy分页抓取网页(Scrapy跳转到倒数第二页(基于示例地址地址)吗?)
我有 Scrapy 的分页问题。
我通常成功使用以下代码
next_page = response.xpath("//div//div[4]//ul[1]//li[10]//a[1]//@href").extract_first()
if next_page is not None:
yield scrapy.Request(url = response.urljoin(next_page), callback=self.parse)
事实证明,在这次尝试中,我遇到了一个使用 5 个页面块的 网站。见下文。
因此,在捕获前 5 页后,Scrapy 跳转到倒数第二页(526).
分页结构遵循以下逻辑:
它在数量上增加。
任何人都可以帮助我进行此分页增量查询(基于示例地址)?
最佳答案
当谈到分页时,最好的方法实际上取决于所使用的分页类型。
如果你:
了解url页面格式
比如url参数page表示你所在的页面知道总页数
然后您可以一次安排所有页面:
def parse_listings_page1(self, response):
"""
here parse first page, schedule all other pages at once!
"""
# e.g. 'http://shop.com/products?page=1'
url = response.url
# e.g. 100
total_pages = int(response.css('.last-page').extract_first())
# schedule every page at once!
for page in range(2, total_pages + 1):
page_url = add_or_replace_parameter(url, 'page', page)
yield Request(page_url, self.parse_listings)
# don't forget to also parse listings on first page!
yield from self.parse_listings(response)
def parse_listings(self, response):
for url in response.css('.listing::attr(href)'):
yield Request(url, self.parse_product)
这种方式最大的好处就是速度——在这里你可以采用异步逻辑,同时抓取所有页面!
或者。
如果你: