赞
踩
在 Scrapy 中,yield
语句用于生成一个 Request
或 Item
对象,并将其提交给 Scrapy 引擎进行处理。这个对象可以是一个需要下载的新页面的请求(Request
),或者是从当前页面中提取的数据条目(Item
)。
具体来说,在爬虫代码中,yield 通常用于以下两个方面:
在解析函数中生成 Item 对象,用于将爬取到的数据保存到数据库或者文件中。
在解析函数中生成 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
方法本身,以处理响应结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。