Scrapy 网络爬虫尽管最初工作正常,但仍陷入无限循环。

问题描述 投票:0回答:1

好吧,我正在开发一个基于 scrapy 的网络爬虫,具有一些简单的功能。机器人应该从一个页面转到另一个页面,解析然后下载。我已经让解析器工作了,我已经让下载工作了。我无法让爬行工作。我已经阅读了关于 Spider 类的文档,我已经阅读了关于解析应该如何工作的文档。我尝试过返回与屈服,但仍然一事无成。我不知道我的代码哪里出了问题。从我编写的调试脚本来看,似乎发生了以下情况。代码将运行,它将很好地抓取第 1 页,它将获得第二页的链接,它将转到第二页,然后它会很高兴地停留在第二页,根本不会抓取第三页。我不知道我的代码中的错误在哪里,也不知道如何更改它来修复它。因此,任何帮助将不胜感激。我确信这个错误是基本的,但我不知道发生了什么。

import scrapy

class ParadiseSpider(scrapy.Spider):
    name = "testcrawl2"
    start_urls = [
        "http://forums.somethingawful.com/showthread.php?threadid=3755369&pagenumber=1",
        ]
    def __init__(self):
        self.found = 0 
        self.goto = "no"
        
    def parse(self, response):
        urlthing = response.xpath("//a[@title='Next page']").extract()
        urlthing = urlthing.pop()
        newurl = urlthing.split()
        print newurl
        url = newurl[1]
        url = url.replace("href=", "")
        url = url.replace('"', "")
        url = "http://forums.somethingawful.com/" + url
        print url
        self.goto = url
        return scrapy.Request(self.goto, callback=self.parse_save, dont_filter = True)  
    
            
    def parse_save(self, response):
        nfound = str(self.found)
        print "Testing" + nfound
        self.found = self.found + 1
        return scrapy.Request(self.goto, callback=self.parse, dont_filter = True)
python-2.7 scrapy
1个回答
3
投票

使用Scrapy规则引擎,这样就不需要在parse函数中编写下一页抓取代码。只需在restrict_xpaths中传入下一页的xpath,parse函数就会得到抓取页面的响应

  rules=(Rule(LinkExtractor(restrict_xpaths= ['//a[contains(text(),"Next")]']),follow=True'),)

  def parse(self,response):
       response.url
© www.soinside.com 2019 - 2024. All rights reserved.