无法抓取所有页面的数据

时间:2020-10-15 04:54:41

标签: python web-scraping scrapy

我无法使用下面的代码获取所有页面,它仅提供高达90页的数据,然后显示进纸错误。 我正在使用next按钮url移至下一页。但是在第90页之后,它给出了我在下面提到的错误。

运行此代码:

import scrapy
import re

class PaginationSpider(scrapy.Spider):
    name = 'pagination'
    allowed_domains = ['www.farfetch.com']
    start_urls = ['https://www.farfetch.com/de/shopping/men/shoes-2/items.aspx?page=1']

    total_pages_pattern = r'"totalPages":(\d+)'
    current_page_pattern = r"page=(\d+)"

    def parse(self, response):
        
        number_of_pages= int(re.search(self.total_pages_pattern, str(response.body)).group(1))
        current_page = int(re.search(self.current_page_pattern, response.url).group(1))
        
        for brand in response.xpath("//h3[@itemprop='brand']//text()"):

            yield {
                "brand":brand.get()
            }

        if current_page <= number_of_pages:

            next_page = "https://www.farfetch.com/de/shopping/men/shoes-2/items.aspx?page=" + str(current_page+1)
            
            print("Current_page:" + str(current_page))

            yield response.follow(url=next_page, callback=self.parse)

错误: Error image

1 个答案:

答案 0 :(得分:1)

    current_page = int(re.search(self.current_page_pattern, response.url).group(1))
如果模式与字符串匹配,则

re.search()方法将返回Re对象。如果没有匹配项,它将返回None。因此,当模式不匹配时,您就是在.group(1)中调用None

这就是为什么您得到AttributeError的原因。

我没有执行您的代码,但是您可以通过添加if语句来解决它。

相关问题