【Python3爬虫】MongoDB入门

2018-09-10 01:06:12来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

最近在学习MongoDB数据库,自己也是踩了不少坑吧,所以打算写一个MongoDB的入门教程。

 

一、MongoDB的简介和安装

  MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

  关于MongoDB的安装,网上是有不少教程的,我想写一下我个人的安装方法吧。

  我的电脑系统是Windows64位, 下载MongoDB是在官网下载的,网址为:https://www.mongodb.com/download-center#community。

  注意:MongoDB最新版本已经没有了 32 位系统的安装文件。

  

  我下载的就是这个4.0.2版本,下载完成后双击安装,在最后一步之前会有一个是否安装图形界面的选项,注意:这个钩子不要钩上,钩上的话就一直下不完了,可以装好MongoDB后再下。

  安装完成之后,安装目录下应该会有一个data文件夹和log文件夹,如果没有的话需要自己新建文件夹。

 

二、MongoDB的简单使用

1、把MongoDB的bin目录添加到环境变量中。

2、在data文件夹下创建db文件夹,在log文件夹下新建一个mongo.log文本。

3、命令行下启动MongoDB服务器:

mongod --dbpath e:\MongoDB\data\db

  如果看到以下信息,就说明MongoDB服务已经成功开启了。

  

  在看到以上信息后,再打开一个命令行窗口,输入mongo即可连接MongoDB数据库。

4、如果每次使用MongoDB都要这么操作的话就太麻烦了,能不能像MySQL一样添加到Windows服务呢?答案当然是能,步骤如下:

  (1)在MongoDB的安装目录下新建一个mongo.conf文本,打开mongo.conf,输入以下内容:

  

  (2)打开cmd,输入以下内容:

mongod.exe --config e:\MongoDB\mongo.conf.txt --install --serviceName "MongoDB"

   说下我在这遇到的一个坑吧,很多教程上写的都是mongo.conf,我这么写的时候会报错,说找不到文件,然后我加上了.txt就没问题了。

  (3)查看是否添加成功:

  打开cmd输入net start MongoDB,如果得到如下结果则说明MongoDB服务已经添加成功了。

  

 

三、编写一个爬虫并把数据存到MongoDB中

这个爬虫是爬取豆瓣读书TOP250的书籍信息,我们现在就这个爬虫爬取到的信息保存到MongoDB数据库中,为了增加这个爬虫的效率,我还使用了进程池。

话不多说,代码如下:

 1 # 爬取豆瓣读书TOP250的信息
 2 import requests
 3 from lxml import etree
 4 from bs4 import BeautifulSoup
 5 import pymongo
 6 from multiprocessing import Pool
 7 import time
 8 
 9 info_list = []
10 
11 headers = {
12     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 "
13                   "Safari/537.36",
14 }
15 
16 
17 def get_details(book_url):
18     res = requests.get(book_url, headers=headers)
19     res.encoding = 'utf-8'
20     soup = BeautifulSoup(res.text, 'html.parser')
21     details = soup.select('.intro p')
22     return details[0].text
23 
24 
25 def get_page(url):
26     res = requests.get(url, headers=headers)
27     s = etree.HTML(res.text)
28     titles = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[1]/a/@title')
29     hrefs = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[1]/a/@href')
30     grades = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[2]/span[2]/text()')
31     others = s.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/p[1]/text()')
32     for title, href, grade, other in zip(titles, hrefs, grades, others):
33         info = {
34             'title': title,
35             'grade': grade,
36             'details': get_details(href),
37             'other': other
38         }
39         info_list.append(info)
40     print("第{}页已解析完毕".format(int(url[str(url).index('=')+1:])//25+1))
41     time.sleep(3)
42 
43 
44 if __name__ == '__main__':
45     urls = ['https://book.douban.com/top250?start={}'.format(i * 25) for i in range(10)]
46     pool = Pool(processes=5)
47     pool.map(get_page, urls)
48     print(info_list)
49     print("开始保存数据,请稍等...")50     client = pymongo.MongoClient('mongodb://localhost:27017/')
51     db = client.test
52     db.create_collection('DouBan')
53     db.DouBan.insert_many(info_list)
54     print("豆瓣读书Top250书籍信息已经保存在MongoDB中!")

  注意:运行爬虫之前记得打开MongoDB服务器。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python 字符串格式化输出方式

下一篇:我的第一个python web开发框架(38)——管理员管理功能