Scrapy中yield的使用
Scrapy中yield的使用
带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代
yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值
重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行
简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始
import scrapy
from scrapy_movie.items import ScrapyMovieItem
class MovieSpider(scrapy.Spider):
name = 'movie'
# allowed_domains = ['www.xx.com']
start_urls = ['https://www.ygdy8.net/html/gndy/oumei/index.html']
def parse(self, response):
data_list = response.xpath('//div[@class="co_content8"]//b/a[2]')
print(data_list)
for data in data_list:
src = data.xpath('./@href').extract_first()
src = "https://www.ygdy8.net" + src
name = data.xpath('./text()').extract_first()
'''
这里我们在循环里不断提取网页的链接,并通过 yield 来发起请求,并且还将函数 getInfo作为回调函数来从响应中提取所需的数据。
'''
yield scrapy.Request(url=src, callback=self.getInfo, meta={"name": name})
def getInfo(self, response):
if response.status == "200":
url = response.xpath('//div[@id="Zoom"]//a/@href').extract_first()
src_url = response.url.split('/')
src_url[-1] = url
url = "/".join(src_url)
name = response.meta("name")
movie = ScrapyMovieItem(url=url, name=name)
'''
这里的yield返回的是一个ScrapyMovieItem对象(from items)
'''
yield movie
scrapy框架会根据 yield 返回的实例类型来执行不同的操作:
- 返回 scrapy.Request 对象,scrapy框架会去获得该对象指向的链接并在请求完成后调用该对象的回调函数。
- 返回 scrapy.Item 对象,scrapy框架会将这个对象传递给 pipelines.py做进一步处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)