详解向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的类方法和静态方法
Dec 13 Python
python装饰器与递归算法详解
Feb 18 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
python 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
基于python OpenCV实现动态人脸检测
May 25 Python
pytorch 数据集图片显示方法
Jul 26 Python
3个用于数据科学的顶级Python库
Sep 29 Python
Python使用gRPC传输协议教程
Oct 16 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
python对象销毁实例(垃圾回收)
Jan 16 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操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python如何为图片添加水印
2016/11/25 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python中的常量和变量代码详解
2018/07/25 Python
Python wordcloud库安装方法总结
2020/12/31 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
vue首次渲染全过程
2021/04/21 Vue.js