尽管有不同的获取请求网址,Scrapy仍在不断抓取开始页面

时间:2017-01-30 21:19:34

标签: web-scraping scrapy scrapy-spider

我正在构建一个刮刀,用scrapy刮掉不同的链接。 Scrapy不断从初始页面抓取链接。尽管GET请求具有不同的URL,但response.url始终相同,导致同一页面被刮除。我不认为有任何类型的重定向,因为链接不会在普通浏览器中被重定向。我还使用this设置了随机DELAY_INTERVAL以及旋转用户代理。这是我的解析功能:

def parse(self,response):
        scraped_data = response.xpath("*//h3/a/@href").extract()        
        if self.urls is not None:               #urls has all the different links to be crawled.
            yield scrapy.Request(urls[self.k],callback=self.parse,dont_filter=True)
            self.k = self.k + 1
        else:
            yield self.logger.info("next page unavailable|LIMIT REACHED")

如何克服这种重复抓取?

1 个答案:

答案 0 :(得分:0)

你的循环存在缺陷,你有一堆未定义的变量:

def parse(self,response):
    links = response.xpath("*//h3/a/@href").extract()       
    if urls is not None:  #  urls is not even defined
        yield scrapy.Request(url[k],callback=self.parse,dont_filter=True)
        k = k + 1   # k is not defined either
    else:
        yield self.logger.info("next page unavailable|LIMIT REACHED")

尝试这样的事情:

def parse(self,response):
    links = response.xpath("*//h3/a/@href").extract()       
    for link in links:
        yield scrapy.Request(link, callback=self.parse)
    if not links:
        yield self.logger.info("next page unavailable|LIMIT REACHED")

如果你想避免重复,你应该避免使用dont_filter标志。