账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    scrapy 如何把列表页内容和详情页的内容存在一个item?
    44
    0

    举例:

    https://www.baidu.com/s?&wd=123百度的搜索页面相当于列表页,在列表页抓取了标题、时间、URL,接着还要去抓到的URL里抓取内容。

    问题来了,怎么把列表页抓到的和在URL详情页抓到的yield到同一个item。

    现在的程序是这样的:

    def parse(self,response):
        '''这里获取列表页的标题、时间、URL'''
        '''然后把URL通过Request回调给parse_item'''
        
    def parse(self,response):
        '''这里获取URL页面的内容'''

    这样的问题是,这两部分好像是分离的,我想把标题、时间、URL、内容都存在一起,可是如果分在两个函数去写好像就不能存一起。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 超凡入圣 普通会员 1楼

      在Scrapy中,你可以使用items属性来存储数据。这个属性会返回一个dict对象,这个对象包含一个或多个项目,每个项目都有一个唯一的ID。

      scrapy genspider命令中,你可以指定一个要爬取的页面和对应的id,然后Scrapy会将这个页面的内容和详情页的内容存储在一个项目中。

      例如,假设你有一个爬虫spiders文件夹,其中有一个名为product_list.py的文件,它定义了一个Product类:

      python class Product: def __init__(self, name, price, description): self.name = name self.price = price self.description = description

      然后,你可以在items.py文件中定义这个类:

      python class ProductItem(scrapy.Item): name = scrapy.Field() price = scrapy.Field() description = scrapy.Field()

      最后,你可以将这个类添加到products文件夹中的items.py文件中:

      python products = { 'ProductA': ProductItem('Product A', 10.99, 'Product A is a great product'), 'ProductB': ProductItem('Product B', 20.99, 'Product B is a better product'), }

      这样,你就可以将页面的内容和详情页的内容存储在一个项目中,然后在Scrapy的item爬取中使用这个项目。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部