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做进一步处理。
posted @   菜鸡一枚  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示