如何向scrapy中的spider传递参数的几种方法


Posted in Python onNovember 18, 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传递参数的几种方法的文章就介绍到这了,更多相关scrapy spider传递参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python的三目运算符和not in运算符使用示例
Mar 03 Python
Python中使用urllib2防止302跳转的代码例子
Jul 07 Python
深入理解Python 代码优化详解
Oct 27 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
Django Rest framework之认证的实现代码
Dec 17 Python
Python绘制热力图示例
Sep 27 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
使用Python将语音转换为文本的方法
Aug 10 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
Python通过字典映射函数实现switch
Nov 06 Python
python中四舍五入的正确打开方式
Jan 18 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 #Python
Python下载的11种姿势(小结)
Nov 18 #Python
Python监听键盘和鼠标事件的示例代码
Nov 18 #Python
Opencv python 图片生成视频的方法示例
Nov 18 #Python
calendar在python3时间中常用函数举例详解
Nov 18 #Python
Python 远程开关机的方法
Nov 18 #Python
python 元组和列表的区别
Dec 30 #Python
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
php连接数据库代码应用分析
2011/05/29 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
Python Socket编程入门教程
2014/07/11 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Python探索之创建二叉树
2017/10/25 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
python多线程扫描端口(线程池)
2019/09/04 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
大学生专科毕业生自我评价
2013/11/17 职场文书
大学生最常用的自我评价
2013/12/07 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
学习十八大宣传标语
2014/10/09 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书