Scrapy:从不同页面中抓取项目字段

时间:2015-12-10 18:20:27

标签: python scrapy scrapy-spider

我试图使用scrapy从不同的页面获取项目字段信息。

我想做什么:

  1. main_url>从此页面抓取所有链接>转到每个链接
  2. 来自每个链接>刮取信息,将信息放入项目列表并转到另一个链接
  3. 来自其他链接>刮取信息并将信息放在相同的项目列表中
  4. 转到下一个链接...重复步骤2 - 4
  5. 完成所有链接后转到下一页并重复步骤1 - 3

    我从下面找到了一些信息,但我仍然无法得到我想要的结果:

    How can i use multiple requests and pass items in between them in scrapy python

    http://doc.scrapy.org/en/latest/topics/request-response.html#topics-request-response-ref-request-callback-arguments

    目标:获取以下布局结果

    enter image description here

    我所做的是

    我的项目课程

    from scrapy.item import Item, Field
    
    class myItems(Item):
        info1 = Field()
        info2 = Field()
        info3 = Field()
        info4 = Field()
    

    我的蜘蛛类

    from scrapy.http import Request
    from myProject.items import myItems
    
    class mySpider(scrapy.Spider):
        name = 'spider1'
        start_urls = ['main_link']
    
        def parse(self, response):
            items = []
    
            list1 = response.xpath().extract() #extract all info from here
            list2 = response.xpath().extract() #extract all info from here
            for i,j in zip(list1, list2):
                link1 = 'http...' + i
                request = Request(link1, self.parseInfo1, dont_filter =True)
                request.meta['item'] = items
                yield request
    
                link2 = 'https...' + j
                request = Request(link2, self.parseInfo2, meta={'item':items}, dont_filter = True)
    
                # Code for crawling to next page 
    
    
        def parseInfo1(self, response):
            item = myItems()
            items = response.meta['item']
            item[info1] = response.xpath().extract()
            item[info2] = response.xpath().extract()
            items.append(item)
            return items
    
        def parseInfo2(self, response):
            item = myItems()
            items = response.meta['item']
            item[info3] = response.xpath().extract()
            item[info4] = response.xpath().extract()
            items.append(item)
            return items
    

    我通过在终端上输入蜘蛛来执行蜘蛛:

    > scrapy crawl spider1 -o filename.csv -t csv
    

    我得到了所有字段的结果,但它们的顺序不正确。我的csv文件如下所示:

    enter image description here

    有谁知道如何在我的"目标"中获得结果。以上? 我很感激帮助。

    由于

1 个答案:

答案 0 :(得分:0)

没关系,我发现了自己的错误。我实例化了myItems类两次,这导致了2个新对象并给出了我得到的结果。