如何向scrapy中的spider传递参数的几种方法


Posted in Python onNovember 18, 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传递参数的几种方法的文章就介绍到这了,更多相关scrapy spider传递参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现的HTTP并发测试完整示例
Apr 23 Python
Python的装饰器用法学习笔记
Jun 24 Python
python实现飞机大战微信小游戏
Mar 21 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
Python属性和内建属性实例解析
Jan 14 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 #Python
Python下载的11种姿势(小结)
Nov 18 #Python
Python监听键盘和鼠标事件的示例代码
Nov 18 #Python
Opencv python 图片生成视频的方法示例
Nov 18 #Python
calendar在python3时间中常用函数举例详解
Nov 18 #Python
Python 远程开关机的方法
Nov 18 #Python
python 元组和列表的区别
Dec 30 #Python
You might like
图书管理程序(三)
2006/10/09 PHP
php实现读取内存顺序号
2015/03/29 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python中列表(list)操作方法汇总
2014/08/18 Python
在Python中调用ggplot的三种方法
2015/04/08 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
什么是网络协议
2016/04/07 面试题
军训生自我鉴定范文
2013/12/27 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
英文自荐信常用句子
2014/03/26 职场文书
商场主管竞聘书
2014/03/31 职场文书
安全负责人任命书
2014/06/06 职场文书
事业单位岗位说明书
2015/10/08 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
python中对列表的删除和添加方法详解
2022/02/24 Python
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android