如何向scrapy中的spider传递参数的几种方法
作者:bluespacezero 时间:2021-12-16 20:04:48
有时需要根据项目的实际需求向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
来源:https://blog.csdn.net/Q_AN1314/article/details/50748700
标签:scrapy,spider,传递参数
0
投稿
猜你喜欢
Python matplotlib如何简单绘制不同类型的表格
2021-10-16 12:23:48
PHP与MySQL开发中页面乱码的产生与解决
2023-10-03 04:10:08
tensorflow 1.X迁移至tensorflow2 的代码写法
2023-07-19 08:30:54
历数Firefox2.0对XML处理的改进
2007-11-27 12:41:00
sqlserver 数据库连接字符串中的可选项收集
2011-10-24 19:48:37
MySQL数据库备份和还原的常用命令
2012-01-05 18:50:06
什么是Semantics?
2008-04-16 13:45:00
Python爬虫JSON及JSONPath运行原理详解
2023-02-21 17:59:48
服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(下)
2008-11-11 12:59:00
python 实现一个反向单位矩阵示例
2023-07-27 16:05:51
不同情况下修复Access数据库的实用方法
2008-11-28 16:18:00
设计规范有谱么?
2008-06-06 12:28:00
试了下Golang实现try catch的方法
2023-07-21 20:49:59
XML编程实例: ASP+XML打造留言本
2008-10-25 16:35:00
利用JSP的思想来做ASP
2005-09-09 10:10:00
SQL查询入门(上篇) 推荐收藏
2011-09-30 11:47:11
asp操作Excel类源码
2009-12-25 19:01:00
Python Opencv实现最强美颜滤镜效果
2021-11-09 11:23:15
Python实现的FTP通信客户端与服务器端功能示例
2023-10-02 21:36:01
关于python并发编程中的协程
2023-10-18 04:37:44