如何向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中的多进程与多线程的使用
Apr 07 Python
python友情链接检查方法
Jul 08 Python
python os用法总结
Jun 08 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Django框架实现逆向解析url的方法
Jul 04 Python
用pycharm开发django项目示例代码
Jun 13 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
python计算auc的方法
Sep 09 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Django Auth用户认证组件实现代码
Oct 13 Python
Python爬取酷狗MP3音频的步骤
Feb 26 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编码转换
2012/11/05 PHP
如何使用php输出时间格式
2013/08/31 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
关于反爬虫的一些简单总结
2017/12/13 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
Python包和模块的分发详细介绍
2020/06/19 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
文明礼仪事迹材料
2014/01/09 职场文书
初中物理教学反思
2014/01/14 职场文书
酒吧创业计划书
2014/01/18 职场文书
读书演讲主持词
2014/03/18 职场文书
模范教师事迹材料
2014/12/16 职场文书
继承权公证书范本
2015/01/23 职场文书
自荐信大全
2019/03/21 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
golang生成并解析JSON
2022/04/14 Golang