详解向scrapy中的spider传递参数的几种方法(2种)


Posted in Python onSeptember 28, 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传递参数的几种方法(2种)的文章就介绍到这了,更多相关scrapy spider传递参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现高效求解素数代码实例
Jun 30 Python
浅谈Python 的枚举 Enum
Jun 12 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
python图像处理模块Pillow的学习详解
Oct 09 Python
tensorflow自定义激活函数实例
Feb 04 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
Python库安装速度过慢解决方案
Jul 14 Python
python从ftp获取文件并下载到本地
Dec 05 Python
Python socket如何解析HTTP请求内容
Feb 12 Python
小结Python的反射机制
Sep 28 #Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 #Python
scrapy结合selenium解析动态页面的实现
Sep 28 #Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 #Python
python 常见的反爬虫策略
Sep 27 #Python
python 5个实用的技巧
Sep 27 #Python
Python日志器使用方法及原理解析
Sep 27 #Python
You might like
处理单名多值表单的详解
2013/06/08 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
浅谈php和.net的区别
2014/09/28 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
javascript 禁止复制网页
2009/06/11 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
简单介绍Python中的len()函数的使用
2015/04/07 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
公司财务总监岗位职责
2013/12/14 职场文书
拓展培训心得体会
2014/01/04 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
环保标语大全
2014/06/12 职场文书
整改落实自查报告
2014/11/05 职场文书
工作失职检讨书
2015/01/26 职场文书
委托函范文
2015/01/29 职场文书
学籍证明模板
2015/06/18 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js