Scrapy中yield的使用

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做进一步处理。

相关文章

新版Windows QQ上线啦,有啥不一样?
365平台赌博

新版Windows QQ上线啦,有啥不一样?

📅 02-08 👁️ 6391
关于啤酒节,你知道酿酒离不开的这些植物吗?
beat365手机版官方

关于啤酒节,你知道酿酒离不开的这些植物吗?

📅 06-17 👁️ 368
离线下载什么意思(离线下载的含义及意义解析)
beat365中文版

离线下载什么意思(离线下载的含义及意义解析)

📅 08-16 👁️ 9861