如何向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判断字符串是否纯数字的方法
Nov 19 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
python读写ini配置文件方法实例分析
Jun 30 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
python实现俄罗斯方块小游戏
Apr 24 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
Python List remove()实例用法详解
Aug 02 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
CI(CodeIgniter)框架配置
2014/06/10 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
强制设为首页代码
2006/06/19 Javascript
js常见表单应用技巧
2008/01/09 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
基于Django的ModelForm组件(详解)
2017/12/07 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
python中几种自动微分库解析
2019/08/29 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
英国名牌男装店:Standout
2021/02/17 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
九年级体育教学反思
2014/01/23 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
邀请函模板
2015/02/02 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python