详解向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 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
Python脚本实现自动发带图的微博
Apr 27 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
Python多线程扫描端口代码示例
Feb 09 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
Python和Go语言的区别总结
Feb 20 Python
python实现的config文件读写功能示例
Sep 24 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
详解python的变量缓存机制
Jan 24 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 Python
Pygame Event事件模块的详细示例
Nov 17 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递归函数返回值使用方法
2013/02/18 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
javascript jQuery插件练习
2008/12/24 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
python实现自动重启本程序的方法
2015/07/09 Python
Python随机读取文件实现实例
2017/05/25 Python
python for 循环获取index索引的方法
2019/02/01 Python
python opencv实现证件照换底功能
2019/08/19 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
python连接mongodb集群方法详解
2020/02/13 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
本科生详细的自我评价
2013/09/19 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
心理学专业求职信
2014/06/16 职场文书
党员检讨书
2014/10/13 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
社区节水倡议书
2015/04/29 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS