python实现爬虫数据存到 MongoDB

所属分类: 数据库 / MongoDB 阅读数: 135
收藏 0 赞 0 分享

在以上两篇文章中已经介绍到了 Python 爬虫和 MongoDB , 那么下面我就将爬虫爬下来的数据存到 MongoDB 中去,首先来介绍一下我们将要爬取的网站, readfree 网站,这个网站非常的好,我们只需要每天签到就可以免费下载三本书,良心网站,下面我就将该网站上的每日推荐书籍爬下来。

利用上面几篇文章介绍的方法,我们很容易的就可以在网页的源代码中寻找到书籍的姓名和书籍作者的信息。

找到之后我们复制 XPath ,然后进行提取即可。源代码如下所示

# coding=utf-8

import re
import requests
from lxml import etree
import pymongo
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def getpages(url, total):
  nowpage = int(re.search('(\d+)', url, re.S).group(1))
  urls = []

  for i in range(nowpage, total + 1):
    link = re.sub('(\d+)', '%s' % i, url, re.S)
    urls.append(link)

  return urls

def spider(url):
  html = requests.get(url)

  selector = etree.HTML(html.text)

  book_name = selector.xpath('//*[@id="container"]/ul/li//div/div[2]/a/text()')
  book_author = selector.xpath('//*[@id="container"]/ul/li//div/div[2]/div/a/text()')

  saveinfo(book_name, book_author)

def saveinfo(book_name, book_author):
  connection = pymongo.MongoClient()
  BookDB = connection.BookDB
  BookTable = BookDB.books

  length = len(book_name)

  for i in range(0, length):
    books = {}
    books['name'] = str(book_name[i]).replace('\n','')
    books['author'] = str(book_author[i]).replace('\n','')
    BookTable.insert_one(books)

if __name__ == '__main__':
  url = 'http://readfree.me/shuffle/?page=1'
  urls = getpages(url,3)

  for each in urls:
    spider(each)

注意,在写入数据库的过程中不要一下子将字典中的数据写入数据库,我一开始就这么写的,但是我发现数据库中只有三条信息,其他信息都不见了。所以采用一条一条的写入。

还有源代码的开头部分,对默认编码的设置一定不可以省略,否则可能会报编码错误(真心感觉 Python 在编码这方面好容易出错,尴尬)。

有的人可能发现了,我将提取的信息转换成了字符串,然后使用 replace() 方法将 \n 去掉了,因为我发现在提取的书籍信息前后存在换行符,看着十分碍眼。

热情提醒一下,在程序运行的时候别忘记将你的 Mongo DB 运行起来,下来看看结果

好了,就这样,如果发现代码哪里存在错误或者说有可以改善的地方,希望留言给我,感谢。

更多精彩内容其他人还在看

mongoDB中CRUD的深入讲解

这篇文章主要给大家介绍了关于mongoDB中CRUD的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

MongoDB 中聚合统计计算--$SUM表达式

这篇文章主要介绍了MongoDB 中聚合统计计算--$SUM表达式的相关知识,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB多条件模糊查询示例代码

这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

MongoDB数据库两阶段提交实现事务的方法详解

这篇文章主要介绍了MongoDB数据库两阶段提交实现事务的方法,结合实例形式详细分析了MongoDB数据库事务提交、回滚、撤销等操作的原理、实现方法及相关操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB基础命令以及操作示例详解

Mongodb:是一种NoSQL数据库,下面这篇文章主要给大家介绍了关于MongoDB基础命令以及操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

MongoDB最大连接数设置失效的异常分析过程与解决方法

mongodb最大连接数是20000。所以业界流传一段话,千万级以下的用mysql、千万级以上的用mongodb,亿级以上的用hadoop。下面这篇文章主要给大家介绍了关于MongoDB最大连接数设置失效的异常分析过程,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB实现备份压缩的方法教程

这篇文章主要给大家介绍了关于MongoDB实现备份压缩的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

MongoDB执行mongoexport时的异常及分析(数字类型的查询)

这篇文章主要给大家介绍了关于MongoDB执行mongoexport时的异常及分析(数字类型的查询)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

MongoDB分片在部署与维护管理中常见的事项总结大全

分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程。下面这篇文章主要给大家总结介绍了关于MongoDB分片在部署与维护管理中常见事项的相关资料,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB存储时间时差问题的解决方法

这篇文章主要给大家介绍了关于MongoDB存储时间时差问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享
查看更多