好吧,所以我正在开发基于scrapy的webcrawler,它具有一些简单的功能。机器人应该从一个页面到另一个页面,解析然后下载。我已经让解析器工作了,我已经下载了工作。我无法让爬行工作。我已经阅读了关于Spider类的文档,我已经阅读了有关解析如何工作的文档。我已经尝试过回归和屈服,我仍然无处可去。我不知道我的代码出错了。从我编写的调试脚本看起来似乎发生了以下情况。代码将运行,它将很好地抓取第1页,它将获得第2页的链接,它将转到第2页,然后它将很乐意留在第2页,而不是抓住第3页。我不知道我的代码中的错误在哪里,或者如何改变它来修复它。所以任何帮助将不胜感激。我确定错误是基本的,但我无法弄清楚发生了什么。
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)
答案 0 :(得分:3)
使用Scrapy规则引擎,这样就不需要在parse函数中编写下一页抓取代码了。只需在restrict_xpaths中传递下一页的xpath,解析函数就会得到抓取页面的响应
rules=(Rule(LinkExtractor(restrict_xpaths= ['//a[contains(text(),"Next")]']),follow=True'),)
def parse(self,response):
response.url