如何向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 相关文章推荐
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
python:print格式化输出到文件的实例
May 14 Python
python2.x实现人民币转大写人民币
Jun 20 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Jupyter加载文件的实现方法
Apr 14 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
python实现三种随机请求头方式
Jan 05 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 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网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
JavaScript简介
2015/02/15 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
python实现百度语音识别api
2018/04/10 Python
python处理数据,存进hive表的方法
2018/07/04 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Python使用进程Process模块管理资源
2020/03/05 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
工作会议欢迎词
2014/01/16 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
神龙架导游词
2015/02/11 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Oracle表空间与权限的深入讲解
2021/11/17 Oracle