当前位置:   article > 正文

Scrapy中yield有什么作用?_scrapy yield有什么用

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

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


关联文章:

return 和 yield的区别是什么?

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/210765
推荐阅读
相关标签
  

闽ICP备14008679号