如何向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黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
Python语言描述最大连续子序列和
Dec 05 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
Django接收照片储存文件的实例代码
Mar 07 Python
TensorFlow-gpu和opencv安装详细教程
Jun 30 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
Django程序的优化技巧
Apr 29 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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 $_SERVER详解
2009/01/16 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
js数组操作常用方法
2014/05/08 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
python实现根据月份和日期得到星座的方法
2015/03/27 Python
Python变量作用范围实例分析
2015/07/07 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
如何利用python 读取配置文件
2021/01/06 Python
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
思想品德自我鉴定
2013/10/12 职场文书
大学班级计划书
2014/04/29 职场文书
授权委托书(完整版)
2014/09/10 职场文书
Python基础之hashlib模块详解
2021/05/06 Python