如何向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使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python极简代码实现杨辉三角示例代码
Nov 15 Python
Python简单计算数组元素平均值的方法示例
Dec 26 Python
Python正则表达式指南 推荐
Oct 09 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 Python
Python 实现数据结构中的的栈队列
May 16 Python
django中media媒体路径设置的步骤
Nov 15 Python
Python 如何调试程序崩溃错误
Aug 03 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
python ansible自动化运维工具执行流程
Jun 24 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
做网页的一些技巧(续)
2007/02/01 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
python三方库之requests的快速上手
2019/03/04 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
党支部公开承诺书
2014/03/28 职场文书
社团活动总结模板
2014/06/30 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电