如何向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 深入理解yield
Sep 06 Python
在Docker上开始部署Python应用的教程
Apr 17 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
python3实现跳一跳点击跳跃
Jan 08 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
Pytest框架之fixture的详细使用教程
Apr 07 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
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
用ADODB.Stream转换
2007/01/22 Javascript
一页面多XMLHttpRequest对象
2007/01/22 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
使用Python对Access读写操作
2017/03/30 Python
python使用mysql数据库示例代码
2017/05/21 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
python difflib模块示例讲解
2017/09/13 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
python and or用法详解
2019/06/26 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Python gevent协程切换实现详解
2020/09/14 Python
python利用线程实现多任务
2020/09/18 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
python利用faker库批量生成测试数据
2020/10/15 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
艾滋病宣传活动总结
2014/05/08 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
个人工作表现评价材料
2014/09/21 职场文书
企业战略合作意向书
2015/05/08 职场文书