本文目录
前言
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
规则处理。