scrapy想了解yield的和callback的用法。这个运行次序不明白。

泡白 2018-05-15 11:03:57
这是我scrapy中的spider:
import scrapy
from autopjt.items import AutopjtItem
from scrapy.http import Request

class AutospdSpider(scrapy.Spider):
name = 'autospd'
allowed_domains = ['dangdang.com']
start_urls = ['http://category.dangdang.com/pg1-cp01.10.13.00.00.00.html']

def parse(self, response):
item=AutopjtItem()
item['name']=response.xpath("//a[@name='itemlist-title']/@title").extract()
item['price']=response.xpath("//span[@class='search_now_price']/text()").extract()
item['link']=response.xpath("//a[@name='itemlist-title']/@href").extract()
item['comnum']=response.xpath("//a[@name='itemlist-review']/text()").extract()
#print("6")

yield item
for i in range(1,3):
url='http://category.dangdang.com/pg'+str(i)+'-cp01.10.13.00.00.00.html'
print("-------"+str(i))
yield Request(url,callback=self.parse)
print("+++++++"+str(i))


结果是:
C:\Users\Administrator\python-text\book_example\spider\autopjt>scrapy crawl autospd --nolog
-------1
+++++++1
-------2
+++++++2
-------1
+++++++1
-------2
+++++++2
-------1
+++++++1
-------2
+++++++2

为什么运行的结果是这样的?我不理解加了yield是如何运作的。然后可以说一下callback吗。是重新调用一次的一次吗?
...全文
1320 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡白 2018-05-16
  • 打赏
  • 举报
回复
111111111111
oyljerry 2018-05-16
  • 打赏
  • 举报
回复
yield是返回这个数据,然后下次函数再进入的时候,会从yield开始继续执行

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧