我正在构建一个刮刀,用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")
如何克服这种重复抓取?
答案 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
标志。