详解向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即时网络爬虫项目启动说明详解
Feb 23 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python中新式类与经典类的区别详析
Jul 10 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
Django模型验证器介绍与源码分析
Sep 08 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
PHP实现多条件查询实例代码
2010/07/17 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php 启动报错如何解决
2014/01/17 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
node.js超时timeout详解
2014/11/26 Javascript
JavaScript手机振动API
2016/06/11 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
javascript流程控制语句集合
2017/09/18 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
python实现实时视频流播放代码实例
2020/01/11 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
工程专业求职自荐书范文
2014/02/08 职场文书
公司建议书怎么写
2014/05/15 职场文书
重阳节标语大全
2014/10/07 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
劳动仲裁调解书
2015/05/20 职场文书
正规借条模板
2015/05/26 职场文书
幽默导游词开场白
2015/05/29 职场文书
大学开学感言
2015/08/01 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript