详解向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 相关文章推荐
Python科学计算之NumPy入门教程
Jan 15 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
Python使用pymysql小技巧
Jun 04 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
详解python编译器和解释器的区别
Jun 24 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
python 爬取疫情数据的源码
Feb 09 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
pandas数值排序的实现实例
Jul 25 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中使用curl_init函数的说明
2010/11/02 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
几行js代码实现自适应
2017/02/24 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
Python如何获取系统iops示例代码
2016/09/06 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
银行职员思想汇报
2013/12/31 职场文书
项目计划书范文
2014/01/09 职场文书
小学毕业家长寄语
2014/01/19 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
人与自然观后感
2015/06/16 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android