如何向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中实现的RC4算法
Feb 14 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
python实现发送邮件及附件功能
Mar 02 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
python 导入数据及作图的实现
Dec 03 Python
Anaconda的安装及其环境变量的配置详解
Apr 22 Python
Python中Yield的基本用法
Oct 18 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 Python
Python中字符串对象语法分享
Feb 24 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+memcache实现的网站在线人数统计代码
2014/07/04 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
python发送HTTP请求的方法小结
2015/07/08 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python 排序算法总结及实例详解
2016/09/28 Python
Python中is与==判断的区别
2017/03/28 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
Python Selenium截图功能实现代码
2020/04/26 Python
python输入中文的实例方法
2020/09/14 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
无工作经验者个人求职信范文
2013/12/22 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
高三学生评语大全
2014/04/25 职场文书
运动员口号
2014/06/09 职场文书
岗位聘任报告
2015/03/02 职场文书
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers