详解向scrapy中的spider传递参数的几种方法(2种)


Posted in Python onSeptember 28, 2020

有时需要根据项目的实际需求向spider传递参数以控制spider的行为,比如说,根据用户提交的url来控制spider爬取的网站。在这种情况下,可以使用两种方法向spider传递参数。

第一种方法,在命令行用crawl控制spider爬取的时候,加上-a选项,例如:

scrapy crawl myspider -a category=electronics

然后在spider里这样写:

import scrapy

class MySpider(scrapy.Spider):
  name = 'myspider'

  def __init__(self, category=None, *args, **kwargs):
    super(MySpider, self).__init__(*args, **kwargs)
    self.start_urls = ['http://www.example.com/categories/%s' % category]
    # ...

也就是在spider的构造函数里加上带入的参数即可。

第二种方法,在用scrapyd控制spider的时候,可以向schedule.json发送-d选项加入参数,同样的,也需要在spider的构造函数里如上写法。例如:

$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1

另外,如果需要在scrapy发出的request上加入参数,可以使用request的meta参数,然后就可以相应的在返回的respose对象中获得传入的参数。这在某些情况下相当有用,比如说需要确定这个url是哪个用户请求爬取的,可以先用上面两种方法之一将信息传递给spider,spider就可以把这个信息加入到request中,然后在相应的reponse中就可以将这个信息与从url的页面中获得的信息一起存入数据库。例如:

def parse_page1(self, response):
  item = MyItem()
  item['main_url'] = response.url
  request = scrapy.Request("http://www.example.com/some_page.html",
               callback=self.parse_page2)
  request.meta['item'] = item
  return request

def parse_page2(self, response):
  item = response.meta['item']
  item['other_url'] = response.url
  return item

到此这篇关于详解向scrapy中的spider传递参数的几种方法(2种)的文章就介绍到这了,更多相关scrapy spider传递参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
《Python之禅》中对于Python编程过程中的一些建议
Apr 03 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
用Pygal绘制直方图代码示例
Dec 07 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
Python hashlib常见摘要算法详解
Jan 13 Python
python 回溯法模板详解
Feb 26 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
python中uuid模块实例浅析
Dec 29 Python
小结Python的反射机制
Sep 28 #Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 #Python
scrapy结合selenium解析动态页面的实现
Sep 28 #Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 #Python
python 常见的反爬虫策略
Sep 27 #Python
python 5个实用的技巧
Sep 27 #Python
Python日志器使用方法及原理解析
Sep 27 #Python
You might like
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHPThumb图片处理实例
2014/05/03 PHP
srcElement表格样式
2006/09/03 Javascript
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
python ddt实现数据驱动
2018/03/14 Python
python实现最大优先队列
2019/08/29 Python
Python3获取cookie常用三种方案
2020/10/05 Python
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
生产班组长岗位职责
2014/01/05 职场文书
加拿大留学自荐信
2014/01/28 职场文书
民生工程实施方案
2014/03/22 职场文书
中秋节主持词
2014/04/02 职场文书
实习单位评语
2014/04/26 职场文书
团日活动总结
2014/04/28 职场文书
最美乡村教师观后感
2015/06/11 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书