详解向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中yield生成器的用法
Aug 05 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
Python Logging 日志记录入门学习
Jun 02 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
Python实现合并excel表格的方法分析
Apr 13 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
Python 实现使用空值进行赋值 None
Mar 12 Python
python右对齐的实例方法
Jul 05 Python
使用Python将语音转换为文本的方法
Aug 10 Python
上手简单,功能强大的Python爬虫框架——feapder
Apr 27 Python
python基于tkinter实现gif录屏功能
May 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
PHP4在Windows2000下的安装
2006/10/09 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
php动态生成函数示例
2014/03/21 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
js快速排序的实现代码
2013/12/08 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
Python实现基本线性数据结构
2016/08/22 Python
Python打印输出数组中全部元素
2018/03/13 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python根据成绩分析系统浅析
2019/02/11 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
Django缓存Cache使用详解
2020/11/30 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
医学生自荐信范文
2013/12/03 职场文书
面料业务员岗位职责
2013/12/26 职场文书
黄河的主人教学反思
2014/02/07 职场文书
小学生元旦广播稿
2014/02/21 职场文书
安全承诺书格式
2014/05/21 职场文书
员工工作及收入证明
2014/10/28 职场文书
邀请书格式范文
2015/02/02 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
公司员工手册范本
2015/05/14 职场文书
Python学习之包与模块详解
2022/03/19 Python