详解向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 Trie树实现字典排序
Mar 28 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python获取央视节目单的实现代码
Jul 25 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
Python面向对象类的继承实例详解
Jun 27 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
python调用摄像头拍摄数据集
Jun 01 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
Django重设Admin密码过程解析
Feb 10 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 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 XML数据解析代码
2010/05/26 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
提高网站信任度的技巧
2008/10/17 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
Sanic框架安装与简单入门示例
2018/07/16 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
python能做什么 python的含义
2019/10/12 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
opencv实现图像平移效果
2021/03/24 Python
班级入场式解说词
2014/02/01 职场文书
日语系毕业求职信
2014/07/27 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
php png失真的原因及解决办法
2021/10/24 PHP