如何向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自动化测试之setUp与tearDown实例
Sep 28 Python
python动态加载包的方法小结
Apr 18 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
python中实现控制小数点位数的方法
Jan 24 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
详解python调用cmd命令三种方法
Jul 08 Python
python 同时读取多个文件的例子
Jul 16 Python
Python 切分数组实例解析
Nov 07 Python
Pycharm制作搞怪弹窗的实现代码
Feb 19 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 Python
python中的random模块和相关函数详解
Apr 22 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
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
Express的路由详解
2015/12/10 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
Python如何快速实现分布式任务
2017/07/06 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
南京迈特望C/C++面试题
2012/07/09 面试题
经济担保书范文
2014/04/02 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
面试复试通知单
2015/04/24 职场文书
公司年会开场白
2015/06/01 职场文书
名人传读书笔记
2015/06/26 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫