MongoDB:非关系型数据库,给予Key-Value形式保存数据,与Python的字典格式类似。它能够轻松应对爬虫字段的变化等情况,也可以轻松的横向扩展、分片和集群,非常适合存储大规模爬虫数据。
一.MongoDB的安装
1.下载页面:https://www.mongodb.com/
2.步骤:software——>community Server——>download MongoDB——>选择对应的版本、系统、package(msi)——>Download
4.安装过程一路next,到左下角出现Install MongoDB Compass(可视化工具)的时候,将前面的勾去掉。不去掉,安装过程较长。后续可重新安装可视化工具。
MongoDB的配置与启动
5.创建数据库存储目录:D:\MongoDB\data
6.启动MongoDB服务器:>cd C:\Program Files\MongoDB\Server\4.2\bin(注意自己安装路径)
>mongod.exe --dbpath=D:\MongoDB\data
>mongod.exe --dbpath=D:\MongDB\data --logpath=D:\MongoDB\logs\mongodb.log
7.MongoDB的可视化管理
Robo 3T:MongoDB的可视化工具
下载链接:https://robomongo.org/
8.下载安装完成后,打开MongoDB服务器,然后启动Robo 3T,系统打开窗口并弹出MongDB Connection对话框。
在配置对话框中输入连接名称,依次单击save和connect,就连接到了MongoDB服务器。连接成功后,就可在右侧看到MongoDB数据库的文件目录。
到这里MongoDB就安装好了!
现在做一个实例爬取数据保存到MongoDB
二.Scrapy链家经纪人数据爬虫实现
1.建立项目,使用crawl模板生成spider文件
>scrapy startproject lianjia01
>cd lianjia01
>scrapy genspider lianjia m.lianjia.com
2.定义item.py 这里只提取经纪人姓名、负责区域
name = scrapy.Field()
region = scrapy.Field()
tran_num = scrapy.Field()
3.编写spider文件,导入必须的包和类、重写start_urls:
import scrapy
from lianjia01.items import Lianjia01Item
class LianjiaSpider(scrapy.Spider):
name = 'lianjia'
allowed_domains = ['m.lianjia.com']
start_urls = ['https://m.lianjia.com/bj/jingjiren/ao22pg' + str(x) for x in range(1,4)]
4.编写spider文件,编写parse方法
def parse(self, response):
agentlist = response.xpath('//*[@class="jingjiren-list-item"]')
for agent in agentlist:
item = Lianjia01Item()
item['name'] = agent.xpath('div/div/div/div[2]/div[1]/span/text()').extract_first()
item['region'] = agent.xpath('div/div/div/div[2]/p/text()').extract_first()
item['tran_num'] = agent.xpath('div/div/div/div[2]/div[3]/div[1]/span/text()').extract_first()
print("经纪人姓名:",item['name'])
print("经纪人所负责区域:",item['region'])
print("经纪人历史成交量为:",item['tran_num'])
yield item
注意:不加yield item爬取出来的数据无法加载到MongoDB数据库
注意要修改xpath
4.编写settings.py文件
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.14 Safari/537.36'
ROBOTSTXT_OBEY = False
COOKIES_ENABLED = False
5.执行代码scrapy crawl lianjia
成功爬取数据!
三 、设置链家网爬虫pipeline
1.在python中使用MongoDB,需要安装MongoDB驱动
>pip install pymongo
2.编写pipelines.py
import pymongo
from pymongo import MongoClient
class Lianjia01Pipeline(object):
#在open_spider方法中连接MongoDB,创建数据库和集合,也可以在__init__初始化方法中处理这些操作
def open_spider(self):
self.db = MongoClient('localhost',27017).lianjia_db
self.collection = self.db.lianjia_collection
def process_item(self, item, spider):
#把Item转化成字典方式,然后添加数据
self.collection.insert_one(dict(item))
return item
3.在settings中启用pipeline(去掉注释)
ITEM_PIPELINES = {
'lianjia01.pipelines.Lianjia01Pipeline': 300,
}
4.运行代码scrapy crawl lianjia
这个时候报了一个错
覆盖方法,spider方法没有用到都要加上
再次运行,刷新数据库
到这里就已经把爬取的数据保存到了MongoDB中啦!