好吧,我正在开发一个基于 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)
使用Scrapy规则引擎,这样就不需要在parse函数中编写下一页抓取代码。只需在restrict_xpaths中传入下一页的xpath,parse函数就会得到抓取页面的响应
rules=(Rule(LinkExtractor(restrict_xpaths= ['//a[contains(text(),"Next")]']),follow=True'),)
def parse(self,response):
response.url