如何向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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
Python中3种内建数据结构:列表、元组和字典
Nov 30 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
使用Python生成XML的方法实例
Mar 21 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
Python2与Python3的区别实例总结
Apr 17 Python
Python语言进阶知识点总结
May 28 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
使用K.function()调试keras操作
Jun 17 Python
简单的Python人脸识别系统
Jul 14 Python
python动态规划算法实例详解
Nov 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
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
动态加载iframe
2006/06/16 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
python输出指定月份日历的方法
2015/04/23 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
Python编写万花尺图案实例
2021/01/03 Python
python解包概念及实例
2021/02/17 Python
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
个人简历自我评价
2014/01/06 职场文书
销售人员获奖感言
2014/02/05 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
个人学习总结范文
2015/02/15 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
基于tensorflow权重文件的解读
2021/05/26 Python
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android