我正在尝试抓取一个网站,其中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的数据?
答案 0 :(得分:0)
我不确定我是否完全了解您想要什么,但是据我了解,在第一页上您会得到fscanf(f1,"%[^\n]%*c",s)
,在第二页上您会得到ID
。这就是我要这样做的方式:
name