如何向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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
python实现扫描ip地址的小程序
Apr 16 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
python 类之间的参数传递方式
Dec 20 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 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
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
php简单实现MVC
2015/02/05 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
拖动一个HTML元素
2006/12/22 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
Python的Flask框架的简介和安装方法
2015/11/13 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
班组长工作职责
2013/12/25 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
小学家长会邀请函
2014/01/23 职场文书
开门红主持词
2014/04/02 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
学校安全责任书
2014/04/14 职场文书
检察院起诉书
2015/05/20 职场文书
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技
Elasticsearch 聚合查询和排序
2022/04/19 Python