本文目录
前言
python简介生成器scrapy中的yield

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

yield的函数都称为`生成器`。next()方法(在Python3中是next())生成结果序列。next()调用时生成器函数一直运行到下一条yield语句为止,此时next()将返回值传递给yield,而且函数将暂时中止执行。next()时,函数执行yield之后的语句,直到函数返回为止。next()方法,而是在for语句、sum()或一些使用序列的其他操作中使用它。# 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)

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时:
start_urls 属性中的每个URL创建了 scrapy.Request对象,并将 parse 方法作为回调函数(callback)赋值给了Request。scrapy.http.Response对象并送回给spider parse()方法。parse函数中respose便是start_urls中请求回来的结果。parse()中取一个返回值时便可以取出一个item序列。而这些item会被设定的pipeline规则处理。