:在scrapy的callback中使用lambda小结
来源:互联网 发布:遗传算法 matlab 编辑:程序博客网 时间:2024/05/22 14:05
用lambda定义函数 的用法其实很简单: lambda [参数部分] : [函数部分]
1
先举一个简单的例子
func = lambda x,y : x+y
如果定义了这个函数之后我们执行这行命令
func(3,5)
那么显而易见结果是8。
如果我们在定义时给参数缺省值,比如
func = lambda x=3,y=5: x+y
那么调用func时
func()
结果为8
func(1,1)
结果为2
2
下面说明如何在scrapy的回调函数中使用。
比如在一个函数中要yield一个request,而回调函数除了response,我们还要一个xpath表达式。
当没有第二个参数时显然yield命令类似于这样:
yield scrapy.Request(url, callback = self.parse_mine)
现在假设我们定义的parse_mine有两个参数:
def parse_mine(self, response, xpath):print(response, xpath)
则在写callback时我们的目的就是要把两个参数都传递进去
所以lambda实际上结构是这样的:
lambda arg1, arg2: self.parse_mine(arg1, arg2)
也就是说我们的匿名函数的功能就是调用一下 self.parse_mine 这个类方法。
但是不能直接这样写,因为我们要告诉request命令我们的实参到底是什么,所以改成下面这样:
lambda arg1=response, arg2=xpath: self.parse_ming(arg1, arg2)
这里有一个需要注意的是,当我们callback的参数只有response,不使用lambda时,我们可以不写出response的参数。但是当我们的参数多于1时,就一定要把所有的参数都在lambda中写出来。
下面是我自己应用的一小段:
for branch_xpath, branch_url in branches: if response.xpath('//h3[text()="'+branch_xpath+'"]/parent::div//p[@class="seeall"]'): print('turn to', response.url.replace(self.index, self.detail)) yield scrapy.Request(response.url.replace(self.index, self.detail)+'&type='+branch_url, callback=lambda arg1=response, arg2=branch_xpath:self.get_branch(arg1, arg2)) else: print('not many children') self.get_branch(response, branch_xpath)
0 0
- :在scrapy的callback中使用lambda小结
- 项目实现过程中遇到的问题记录(二)------------在Thread中使用CallBack并没有调用CallBack的返回
- scrapy使用小结
- 在 alchemy 中,callback 的实现实例
- c++ 0x Lambda :在自己的项目中使用
- 在Android中使用Java 8的lambda表达式
- 如何在Android studio中使用java8 的Lambda表达式
- 在Python中使用lambda高效操作列表的教程
- 在Python中使用lambda高效操作列表的教程
- 在Java中使用Lambda表达式的技巧
- Spring 中 CallBack 模式的使用
- android:在android studio中使用lambda,android lambda,retrolambda
- 如何在eclipse中使用scrapy?
- 在Ext的JsonStore的load方法中使用回调callback 修改treeStore 数据
- Python中lambda的使用
- python中lambda的使用
- java8中lambda的使用
- 在windows上安装python的scrapy的小结
- ActiveMQ源码解析(五):聊聊activemq的broker集群
- ElasticSearch源码解析(一):转一篇介绍中文分词的文章
- Writing a Linux device driver module for kernels 2.6 or later with udev
- dojo ajax post 和 get 的方法的使用
- Android之ActivityManager与Proxy模式的运用
- :在scrapy的callback中使用lambda小结
- Linux常用命令-curl
- 关于scrapy有用的链接
- C# SOCKET GET/POST的实现
- 学年总结(2015-2016学年回顾)
- Mac的固件密码能被破解吗?
- 跟我学Android之二 第一个程序
- <读书笔记>软件调试之道 :从大局看调试-理想的调试环境
- 大型互联网技术架构4-分布式存储-II Google