详解向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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
Python警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python建立Map写Excel表实例解析
Jan 17 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
python 实现dict转json并保存文件
Dec 05 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
python用字节处理文件实例讲解
Apr 13 Python
python3 hdf5文件 遍历代码
May 19 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生成HTML静态页面实例代码
2008/08/31 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
Python中encode()方法的使用简介
2015/05/18 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python3.5的包存放的具体路径
2020/08/16 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
四风问题自查报告剖析材料
2014/02/08 职场文书
优秀医生事迹材料
2014/02/12 职场文书
个人承诺书格式
2014/06/03 职场文书
员工趣味活动方案
2014/08/27 职场文书
导航工程专业自荐信
2014/09/02 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python