如何向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检测lvs real server状态
Jan 22 Python
用python登录Dr.com思路以及代码分享
Jun 25 Python
python写日志封装类实例
Jun 28 Python
matplotlib给子图添加图例的方法
Aug 03 Python
python 图像平移和旋转的实例
Jan 10 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
Python : turtle色彩控制实例详解
Jan 19 Python
python实现语音常用度量方法的代码详解
May 25 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
Oct 16 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中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
python在命令行下使用google翻译(带语音)
2014/01/16 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
服务员自我评价
2014/01/25 职场文书
采购主管岗位职责
2014/02/01 职场文书
销售人员获奖感言
2014/02/05 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
公司管理建议书
2015/09/14 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
详解Vue router路由
2021/11/20 Vue.js