基于python的scrapy框架中使用MongoDB遇到的问题
2016-12-13 15:22
676 查看
使用MongoDB保存抓取结果,应如何设置settings.py与pipelines.py
1. settings.py
# settings.py MONGODB_SERVER = 'localhost' MONGODB_PORT = 27017 MONGODB_DB = 'freebuf_db' MONGODB_COLLECTION = 'wenzhang'
在settings.py文件的设置中,MONGODB_PORT变量起初的定义是在27017上加了单引号,运行后系统报错,称“MONGODB_PORT must be int”, 所以这里要注意该变量的值为整形,非字符串型。
2. pipelines.py
# pipelines.py import pymongo from scrapy.conf import settings #from scrapy.exceptions import DropItem #from scrapy import log class MongoPipeline(object): def __init__(self): self.server = settings['MONGODB_SERVER'] self.port = settings['MONGODB_PORT'] self.db = settings['MONGODB_DB'] self.col = settings['MONGODB_COLLECTION'] connection = pymongo.MongoClient(self.server, self.port) db = connection[self.db] self.collection = db[self.col] def process_item(self, item, spider): self.collection.insert(item) return item
在pipelines.py的设置中,原本使用了命令:
connection = pymongo.Connection(self.server, self.port)
系统在该处报错“找不到这个方法”,查询资料过后发现,在新版本中pymongo,已经取消了Connection函数,而使用函数MongoClient(),这里需注意。
3. item报错“缺少_id”定义
以上两个文件设置好,并排除错误后,运行整个爬虫,报错“item中没有定义_id”。这个错误的出现让我有点不知所措,在我的知识储备中,_id是将数据存入mongodb时,mongodb会给每条数据自定义一个唯一的"_id"。所以,我原本认为,“_id”这个属性是不需要自己声明的。但是系统在此处报错,所以我尝试性的在items.py文件中,加入了对“_id”的声明:_id = scrapy.Field()
再次运行后,抓取成功。至今不明白为什么需要自己对该变量进行声明,如果哪位网友有思路,希望能够对改篇博客进行回复,十分感谢。
相关文章推荐
- 基于Python使用scrapy-redis框架实现分布式爬虫 注
- 基于python的-scrapy框架使用步骤
- SVN在windows上使用check-case-insensitive.py遇到的问题(Python2.5,svn1.5.4)
- Struts2.1.8 验证框架(validation)的使用中遇到的一些问题(直接访问jsp遇到的错误)--Allen
- 基于python的REST框架eve测试与mongodb的数据操作
- Python开源框架Scrapy安装及使用
- Python 语言使用中遇到的问题汇总
- 2009-03-25技术学习:使用Wicket框架时遇到的问题
- centos中使用python遇到的几个问题
- MongoDB安装成为Windows服务及日常使用遇到问题总结
- 搜索引擎–Python下开源爬虫(spider)框架scrapy的使用
- MongoDB安装成为Windows服务及日常使用遇到问题总结
- 基于WINAVR + avr studio 4 使用外部晶振时及延时可能遇到的问题( By-炬本)
- Python Web框架Pylons中使用MongoDB的例子
- 关于我使用spring mvc框架做文件上传时遇到的问题
- Struts2.1.8 验证框架(validation)的使用中遇到的一些问题(直接访问jsp遇到的错误)
- python使用遇到的问题
- Python开源网络爬虫或网络蜘蛛scrapy入门遇到问题
- Python:Scrapy框架中Item Pipeline组件(项目管道组件)的使用教程
- Python Web框架Pylons中使用MongoDB的例子