爬虫学习(四)mongoDB与Scrapy—优化豆瓣电影实例
知识点笔记:
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。其与Python配合简直是完美。
1. MongoDB的安装:
官方网站下载地址:https://www.mongodb.com/download-center?jmp=nav#atlas
为了更加方便的使用MongoDB,我们还要安装一个可视化工具,我选择的是Robomongo这款免费的软件。
小技巧是: 可以编写一个批处理文件,如图所示,直接点击这个批处理文件就可以直接运行MongoDB,非常方便!
其内容如下,用记事本编写,保存为 .bat 格式。
2. Python与MongoDB
Python通过库pymongo来完成对mangodb的操作:
db=connection.myblog # *选择库*
collection=db.test # *使用test集合*
jike= {"name":"lizemin","age":"23"} # *添加单条数据到集合中
collection.insert(user) #添加数据
collection.remove(users) #删除数据
测试实例:
# -*-coding:utf8-*-
import pymongo
connection = pymongo.MongoClient()
tdb = connection.mylog
post_info = tdb.test
jike = {'name':u'极客', 'age':'5', 'skill': 'Python'}
god = {'name': u'玉皇大帝', 'age': 36000, 'skill': 'creatanything', 'other': u'王母娘娘不是他的老婆'}
godslaver = {'name': u'月老', 'age': 'unknown', 'other': u'他的老婆叫孟婆'}
post_info.insert(jike)
post_info.insert(god)
post_info.insert(godslaver)
post_info.remove({'name': u'极客'})
print u'操作数据库完成!'
豆瓣电影实例优化:
URL:https://movie.douban.com/top250
目标:爬取电影标题,信息,评分以及语录并存储在数据库中
主要在piplines和setting中发现变化,其他代码不变
piplines.py
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
from scrapy.conf import settings
import pymongo
class MangoPipeline(object):
def __init__(self):
# 获取setting主机名、端口号和数据库名
host = settings['MONGODB_HOST']
port = settings['MONGODB_PORT']
dbname = settings['MONGODB_DBNAME']
# pymongo.MongoClient(host, port) 创建MongoDB链接
client = pymongo.MongoClient(host=host,port=port)
# 指向指定的数据库
mdb = client[dbname]
# 获取数据库里存放数据的表名
self.post = mdb[settings['MONGODB_DOCNAME']]
def process_item(self, item, spider):
data = dict(item)
# 向指定的表里添加数据
self.post.insert(data)
return item
settings.py
# -*- coding: utf-8 -*-
# Scrapy settings for mango project
BOT_NAME = 'mango'
SPIDER_MODULES = ['mango.spiders']
NEWSPIDER_MODULE = 'mango.spiders'
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
ROBOTSTXT_OBEY = True
DOWNLOAD_DELAY =5
COOKIES_ENABLED = True
ITEM_PIPELINES = {
'mango.pipelines.MangoPipeline': 300,
}
MONGODB_HOST='127.0.0.1'
MONGODB_PORT=27017
MONGODB_DBNAME='MOVIE'
MONGODB_DOCNAME='movie'
#FEED_URI=u'file:///G:/MOSE.csv'
#FEED_FORMAT='CSV'
数据库中结果如图所示: