详解向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常用模块介绍
Nov 21 Python
Python自动扫雷实现方法
Jul 25 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
python读文件的步骤
Oct 08 Python
python pygame实现球球大作战
Nov 25 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
Apr 14 Python
Python基于字典实现switch case函数调用
Jul 22 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 Python
python中的getter与setter你了解吗
Mar 24 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 批量删除数据的方法分析
2009/10/30 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
php强制运行广告的方法
2014/12/01 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
js实现简单的验证码
2015/12/25 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
JQuery获得内容和属性方法解析
2020/05/30 jQuery
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
python实现定时发送邮件
2020/12/23 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
ORACLE第二个十问
2013/12/14 面试题
Python使用openpyxl复制整张sheet
2021/03/24 Python
商务日语毕业生自荐信
2013/11/23 职场文书
高二化学教学反思
2014/01/30 职场文书
个人务虚会发言材料
2014/10/20 职场文书
部队个人年终总结
2015/03/02 职场文书
国博复兴之路观后感
2015/06/02 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js