Scrapy中yield有什么作用?

在 Scrapy 中,yield 语句用于生成一个 RequestItem 对象,并将其提交给 Scrapy 引擎进行处理。这个对象可以是一个需要下载的新页面的请求(Request),或者是从当前页面中提取的数据条目(Item)。

具体来说,在爬虫代码中,yield 通常用于以下两个方面:

  1. 在解析函数中生成 Item 对象,用于将爬取到的数据保存到数据库或者文件中。

  2. 在解析函数中生成 Request 对象,用于构造下一次请求。当爬虫解析完一个页面后,需要根据页面内容构造出下一次请求并发送给服务器。这时可以使用 yield 语句生成新的 Request 对象,并将其交给Scrapy 引擎处理。

举个例子,在 Scrapy 的 spider 中,可以使用 yield 来生成一个请求对象并将其发送到 Scrapy 引擎中,像这样:

import scrapy

class MySpider(scrapy.Spider):
    
    name = 'example'
    start_urls = ['http://example.com']

    def parse(self, response):
        # 提取网页中的数据,并生成 Item 对象
        item = {
            'title': response.css('title::text').get(),
            'body': response.css('p::text').get()
        }
        yield item
        
        # 发送请求获取更多页面
        for link in response.css('a::attr(href)').getall():
            yield scrapy.Request(link, self.parse)

在这个例子中,parse 方法是 Scrapy 爬虫默认回调函数。在该方法中,我们首先使用 CSS Selector 提取了当前页面的标题和正文,并将其存储在一个字典对象 item 中。然后,我们使用 yield 语句将该对象发送给 Scrapy 引擎,以便将其保存到输出文件中。

接下来,我们遍历当前页面中所有链接的列表,使用 scrapy.Request 构造函数创建一个新的请求对象,并使用 yield 将其发送给 Scrapy 引擎。这将导致 Scrapy 引擎立即启动一个新的下载程序,并将其添加到等待队列中,以便稍后进行处理。当该请求被下载并返回时,Scrapy 引擎将调用指定的回调函数,即 parse 方法本身,以处理响应结果。


关联文章:

return 和 yield的区别是什么?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值