Scrapy 按顺序爬取
我搞不清楚怎么让scrapy按顺序爬取链接。我有一个页面,上面有很多文章,每篇文章都有一个标题,但文章的内容和标题不匹配。另外,我在settings.py文件里添加了:
DEPTH_PRIORITY = 1
SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'
我现在的情况大概是这样的:
class Getgot(Spider):
name = "getem"
allowed_domains = ["somesite.us"]
start_urls = ["file:local.html"]
el = '//div[@article]'
def parse(self,response):
hxs = HtmlXPathSelector(response)
s = hxs.select('//article')
filename = ("links.txt")
filly = open(filename, "w")
for i in s:
t = i.select('a/@href').extract()
filly.write(str(t[0])+'\n')
yield Request(str(t[0]),callback=self.parse_page)
def parse_page(self,res):
hxs = HtmlXPathSelector(res)
s = hxs.select('//iframe').extract()
if s:
filename = ("frames.txt")
filly = open(filename, "a")
filly.write(str(s[0])+'\n')
else:
filename = ("/frames.txt")
filly = open(filename, "a")
filly.write('[]\n')
1 个回答
0
我不太明白你的问题和你的代码有什么关系。标题在哪里呢?
这里有几个小建议:1)把你的scrapy语法更新到最新版本;2)不要在爬虫里直接写文件,应该在管道中处理或者导出数据;3)如果你需要把数据从一个函数传到下一个函数,可以使用meta属性。
def parse(self, response):
for link in response.xpath("//article/a/@href").extract():
yield Request(link, callback=self.parse_page, meta={'link':link})
def parse_page(self, response):
for frame in response.xpath("//iframe").extract():
item = MyItem()
item['link'] = response.meta['link']
item['frame'] = frame
yield item
然后你可以把它导出为csv、json或者其他格式,这样就可以把链接和框架一起存储起来。