详解向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 相关文章推荐
Python3.2中的字符串函数学习总结
Apr 23 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
mac使用python识别图形验证码功能
Jan 10 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
python开发入门——set的使用
Sep 03 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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设计模式 Singleton(单例模式)
2011/06/26 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
validator验证控件使用代码
2010/11/23 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
三方协议书范本
2014/04/22 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
介绍长城的导游词
2015/01/30 职场文书
中国世界遗产导游词
2015/02/13 职场文书
代理词怎么写
2015/05/25 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS