如何从不同页面抓取数据并分配给同一数据集?

时间:2018-12-26 15:21:10

标签: python scrapy

我正在尝试抓取一个网站,其中item_id以及一些数据位于一页上,而有关该项目的其他信息则位于另一页上。

我面临的问题是如何将附加信息分配给第1页上找到的同一数据集?

项目:

class GetIt(scrapy.Item):
    ID         = scrapy.Field()
    name         = scrapy.Field()

我的抓取工具的相关部分:

rules = (

        Rule( # first page
            LinkExtractor(allow=['regex']), 
            callback='parse_1'
        ),
        Rule( # second page
            LinkExtractor(allow=['regex']), 
            callback='parse_2'
        ),

        Rule( # index pages
            LinkExtractor(allow=['regex']), 
            follow=True
        ),
    )

    def parse_1(self, response):
        GetIt                    = GetIt()
        GetIt['ID']              = response.xpath('regex').re_first('regex=(\d+)')
        return item

    def parse_2(self, response):
        GetIt                   = GetIt()
        GetIt['name']           = response.xpath('regex').extract()

因此,想法是,如果规则触发,他将提取新项目,如果规则2触发,他将找到一个包含项目更多信息的页面。规则3从索引站点获取所有页面。

信息在页面类型1上:

/maininfo.html

类型2上项目的辅助信息:

/search.php?itemid=303

在页面类型1上,有指向页面类型2的链接,因此我可以提取链接和ID。

理论上,我也可以直接在解析器函数中调用页面:

url2 = response.xpath('code').extract_first() # get the link
scrapy.Request(url2, callback=self.parse_unitpage) # get the name from 2nd page
... somehow like this

这可能吗?如果不是这样,如果ID属于同一数据集,该如何合并页面type1,2的数据?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全了解您想要什么,但是据我了解,在第一页上您会得到fscanf(f1,"%[^\n]%*c",s),在第二页上您会得到ID。这就是我要这样做的方式:

name