详解向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字典操作简明总结
Apr 13 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
Python中Continue语句的用法的举例详解
May 14 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
Python分析学校四六级过关情况
Nov 22 Python
mac系统安装Python3初体验
Jan 02 Python
python如何在循环引用中管理内存
Mar 20 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
总结python中pass的作用
Feb 27 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
python2.7使用scapy发送syn实例
May 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python中进行自动化单元测试的教程
2015/04/15 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
Python读取网页内容的方法
2015/07/30 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
文明礼仪小标兵事迹
2014/01/12 职场文书
打架检讨书400字
2014/01/17 职场文书
高三励志标语
2014/06/05 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python