详解向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 02 Python
详解Python中的循环语句的用法
Apr 09 Python
一张图带我们入门Python基础教程
Feb 05 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
使用python和Django完成博客数据库的迁移方法
Jan 05 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
python 批量修改/替换数据的实例
Jul 25 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
基于python实现生成指定大小txt文档
Jul 20 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
PyTorch 如何检查模型梯度是否可导
Jun 05 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
桌面中心(一)创建数据库
2006/10/09 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
python冒泡排序简单实现方法
2015/07/09 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
css 元素选择器的简单实例
2016/05/23 HTML / CSS
什么是TCP/IP
2014/07/27 面试题
有模特经验的简历自我评价
2013/09/19 职场文书
教育实习生的自我评价分享
2013/11/21 职场文书
反腐倡廉标语
2014/06/24 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers