Scrapy按顺序爬行

时间:2014-07-31 10:58:27

标签: python 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 :(得分:0)

我不确定我是否理解您的问题和代码是如何相关的。标题在哪里?

一些提示:1)使用最新版本更新您的scrapy语法2)不要写蜘蛛中的任何文件,将其写入管道或导出Feed。 3)如果您需要将数据从一个函数传输到下一个函数,请使用元属性。

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或其他任何内容,以将链接和框架存储在一起。