前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的yield

python中的yield

作者头像
efonfighting
发布2019-12-24 12:13:35
7480
发布2019-12-24 12:13:35
举报
文章被收录于专栏:一番码客

本文目录

前言

python简介生成器scrapy中的yield

前言

上一篇一番简单介绍了下scrapy工具的使用,深入时一番发现,yield这个关键字在很多scrapy的例子和教程里用的特别多。所以今天我们来研究下yield到底是个什么东西。

python简介

首先我们先总体看下python涉及到的基础数据格式。

生成器

  • 任何使用yield的函数都称为`生成器`
  • 调用生成器函数将创建一个对象,该对象通过连续调用next()方法(在Python3中是next())生成结果序列
  • next()调用时生成器函数一直运行到下一条yield语句为止,此时next()将返回值传递给yield,而且函数将暂时中止执行。
  • 再次调用next()时,函数执行yield之后的语句,直到函数返回为止。
  • 通常不会在生成器上直接调用next()方法,而是在for语句、sum()或一些使用序列的其他操作中使用它。
代码语言:javascript
复制
# file: yield.py
def countdown(n):
    print("Efon,are you ready?")
    while n > 0:
        yield n
        n -= 1

for i in countdown(5):
    print(i)

scrapy中的yield

代码语言:javascript
复制
    def parse(self, response):
        items = response.css("#r_content section")

        for item in items:
            host = "https://m.zhaopin.com"
            url  =  host + item.xpath('//a/@data-link').extract_first()
            print(url)
            yield Request(url,callback=self.parse_item)
        pass
    def parse_item(self,response):
            item = TutorialItem()
            q = response.css
            item['address'] = q('.add::text').extract_first()
            yield  item
  • 回顾下:

当我们执行scrapy crawl 51job时:

  • scrapy为Spider的 start_urls 属性中的每个URL创建了 scrapy.Request对象,并将 parse 方法作为回调函数(callback)赋值给了Request。
  • Request对象经过调度,执行生成 scrapy.http.Response对象并送回给spider parse()方法。
  • 也即,parse函数中respose便是start_urls中请求回来的结果。
  • 每次从parse()中取一个返回值时便可以取出一个item序列。而这些item会被设定的pipeline规则处理。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一番码客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • python简介
  • 生成器
  • scrapy中的yield
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档