详解向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 相关文章推荐
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
Python发送http请求解析返回json的实例
Mar 26 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
python递归全排列实现方法
Aug 18 Python
Django中Middleware中的函数详解
Jul 18 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
python中sys模块是做什么用的
Aug 16 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
如何用python批量调整视频声音
Dec 22 Python
超级详细实用的pycharm常用快捷键
May 12 Python
Python之基础函数案例详解
Aug 30 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
php ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
PHP 图片上传代码
2011/09/13 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
基于jquery封装的一个js分页
2011/11/15 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python中返回矩阵的行列方法
2018/04/04 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
财务担保书范文
2014/04/02 职场文书
环保倡议书300字
2014/05/15 职场文书
上课说话检讨书
2015/01/27 职场文书
男人帮观后感
2015/06/18 职场文书