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

梅林

我正在尝试抓取一个网站,其中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的数据?

斯塔斯迪普

我不确定我是否完全了解您想要什么,但是据我了解,第一页您会得到ID,第二页您会得到name这就是我要做的:

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

    yield Request(url_to_get_name, self.parse_2, meta={'item': item})

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

    yield item

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同一数据集的日期范围

来自分类Dev

同一数据集的日期范围

来自分类Dev

如何将数据表分配给数据集?

来自分类Dev

如何使用日期截止点数据集将纵向事件数据分配给阶段?

来自分类Dev

在一个查询中显示来自同一数据集的不同值

来自分类Dev

饼图布局在Firefox和Chrome上针对同一数据集产生不同的顺序

来自分类Dev

有效/简单地对同一数据集的不同范围进行计数

来自分类Dev

小数精度沿同一数据集的工作方式不同

来自分类Dev

保存的随机森林模型在同一数据集上产生不同的结果

来自分类Dev

如何将值onClick从不同组件分配给React中的另一个组件

来自分类Dev

datarow变量分配给数据集的表newrow

来自分类Dev

如何使用jQuery .clone()将不同的数据属性分配给克隆的DOM元素

来自分类Dev

星火:在同一数据集排减值

来自分类Dev

Matplotlib同一数据集的多个比例

来自分类Dev

如何使用Apache Flink在同一数据集上计算两个和

来自分类Dev

Caffe 如何在原型中为同一数据集缩放和设置均值

来自分类Dev

如何合并R中同一数据帧中不同列的字符

来自分类Dev

如何在同一数据集中查找不同类别的总数?

来自分类Dev

oracle如何同时更新同一数据文件中的不同行

来自分类Dev

如何创建到同一数据库但具有不同凭据的多个sqlalchemy连接?

来自分类Dev

如何使用同一数据库在不同应用程序之间执行Django查找?

来自分类Dev

如何将数据分配给变量?

来自分类Dev

如何限制对未分配给特定用户的数据的访问?

来自分类Dev

如何从选择查询中将数据分配给会话

来自分类Dev

如何在反应中将 csv 数据分配给状态?

来自分类Dev

无法将数据分配给客户端数据集

来自分类Dev

Silverstripe 3.2-如何在不同选项卡的ModelAdmin中管理同一数据对象的不同列表

来自分类Dev

将两个不同列表中的值顺序分配给python中数据框的一列

来自分类Dev

如何在同一数据框内匹配值?

Related 相关文章

  1. 1

    同一数据集的日期范围

  2. 2

    同一数据集的日期范围

  3. 3

    如何将数据表分配给数据集?

  4. 4

    如何使用日期截止点数据集将纵向事件数据分配给阶段?

  5. 5

    在一个查询中显示来自同一数据集的不同值

  6. 6

    饼图布局在Firefox和Chrome上针对同一数据集产生不同的顺序

  7. 7

    有效/简单地对同一数据集的不同范围进行计数

  8. 8

    小数精度沿同一数据集的工作方式不同

  9. 9

    保存的随机森林模型在同一数据集上产生不同的结果

  10. 10

    如何将值onClick从不同组件分配给React中的另一个组件

  11. 11

    datarow变量分配给数据集的表newrow

  12. 12

    如何使用jQuery .clone()将不同的数据属性分配给克隆的DOM元素

  13. 13

    星火:在同一数据集排减值

  14. 14

    Matplotlib同一数据集的多个比例

  15. 15

    如何使用Apache Flink在同一数据集上计算两个和

  16. 16

    Caffe 如何在原型中为同一数据集缩放和设置均值

  17. 17

    如何合并R中同一数据帧中不同列的字符

  18. 18

    如何在同一数据集中查找不同类别的总数?

  19. 19

    oracle如何同时更新同一数据文件中的不同行

  20. 20

    如何创建到同一数据库但具有不同凭据的多个sqlalchemy连接?

  21. 21

    如何使用同一数据库在不同应用程序之间执行Django查找?

  22. 22

    如何将数据分配给变量?

  23. 23

    如何限制对未分配给特定用户的数据的访问?

  24. 24

    如何从选择查询中将数据分配给会话

  25. 25

    如何在反应中将 csv 数据分配给状态?

  26. 26

    无法将数据分配给客户端数据集

  27. 27

    Silverstripe 3.2-如何在不同选项卡的ModelAdmin中管理同一数据对象的不同列表

  28. 28

    将两个不同列表中的值顺序分配给python中数据框的一列

  29. 29

    如何在同一数据框内匹配值?

热门标签

归档