Python爬虫入门实战八:数据储存——MongoDB与MySQL

数据存储-PyMysql和PyMongo

首先祝大家元宵节快乐!!!

前面的文章里写的爬虫都是直接把爬取的数据打印出来。在实际的应用中,当然不能这么做,我们需要将数据存储起来。存储数据的方式有很多中,比如存储在文本文件中,或者是存储在数据库中。 为了使用数据的便捷性,我们选择将数据存储在数据库中。 数据库主流的两种类型为:SQL(关系型数据库)和NoSQL(非关系型数据库) 我们在此选用使用比较广泛的MySQL和MongoDB作为讲解。

一、MySQL

1、安装MySQL

由于MySQL的安装文件比较大且配置稍微繁琐,个人推荐在普通环境下使用集成包,比如USBWebserver。 USBWebserver其实是一款傻瓜式本地电脑快速架设PHP网站环境的工具,它最大特色是纯绿色便携,可直接放在U盘里随处运行它集成了 Apache (httpd)、PHP、MySQL 以及 PHPMyAdmin 等组件,而我们使用它的MySQL即可。

打开程序之后,看到Mysql运行成功,就可以打开PHPMyAdmin

点击执行,进入控制页面

就可以在里面创建数据库,创建数据表了。 更多介绍及下载:http://www.iplaysoft.com/usbwebserver.html

2、安装pymysql

在Python中使用MySQL,有两种方式,使用ORM(对象关系映射)框架和数据库模块,在此我们使用数据库模块pymysql(Python3)。 安装pymysql:

pip install pymysql

3、在爬虫程序中使用mysql

我们以之前爬取今日头条的例子来扩展; 之前的代码是这样的:

# coding:utf-8import requests
import json

url = 'http://www.toutiao.com/api/pc/focus/'
wbdata = requests.get(url).text

data = json.loads(wbdata)
news = data['data']['pc_feed_focus']

for n in news:    
  title = n['title']    
  img_url = n['image_url']    
  url = n['media_url']    
  print(url,title,img_url)

在最后,我们直接使用print将数据打印了出来。 现在我们使用pymysql将数据存储到Mysql中。 (创建数据库toutiao,创建数据表data) 修改的代码如下:

# coding:utf-8import requests
import json
import pymysql

conn = pymysql.connect(host='localhost',port=3307,user='root',password='usbw',db='toutiao',charset='utf8')
cursor = conn.cursor()

url = 'http://www.toutiao.com/api/pc/focus/'wbdata = requests.get(url).text

data = json.loads(wbdata)
news = data['data']['pc_feed_focus']for n in news:
    title = n['title']
    img_url = n['image_url']
    url = n['media_url']    print(url,title,img_url)
    cursor.execute("INSERT INTO data(title,img_url,url)VALUES('{0}','{1}','{2}');".format(title,img_url,url))
    conn.commit()

cursor.close()
conn.close()

最后,数据库中就已经存储了数据:

与之前的代码相比,有以下不同: 引入pymysql模块: import pymysql 建立一个mysql的连接: conn = pymysql.connect(host='localhost',port=3307,user='root',password='usbw',db='toutiao',charset='utf8') 创建一个游标cursor: cursor = conn.cursor() 执行一个SQL语句: cursor.execute("INSERT INTO data(title,img_url,url)VALUES('{0}','{1}','{2}');".format(title,img_url,url)) 提交执行(因为对数据进行和修改,如果只是select,则不需要):

conn.commit()

最后,关闭连接:

cursor.close()
conn.close()

嗯,将数据保存在MySQL就完成了,更多的MySQL和PyMySQL的用法,还请看文档 下面看看MongoDB

二、MongoDB

1、下载并安装MongoDB:

https://www.mongodb.com/download-center

2、运行mongodb:

进入安装好之后的mongo目录的bin目录,打开命令行窗口,输入“mongod --dbpath=数据存放路径”

3、安装pymongo:

pip install pymongo

4、使用MongoDB和PyMongo

依然是扩展爬取今日头条的例子,先上代码:

# coding:utf-8import requestsimport jsonimport pymongo

conn = pymongo.MongoClient(host='localhost',port=27017)
toutiao = conn['toutiao']
newsdata = toutiao['news']

url = 'http://www.toutiao.com/api/pc/focus/'wbdata = requests.get(url).text

data = json.loads(wbdata)
news = data['data']['pc_feed_focus']for n in news:
    title = n['title']
    img_url = n['image_url']
    url = n['media_url']
    data = {        'title':title,        'img_url':img_url,        'url':url
    }
    newsdata.insert_one(data)for i in newsdata.find():
    print(i)

存储数据到MongoDB并读取出来

Pymongo相关的代码为: 引入模块

import pymongo

连接到Mongo

conn = pymongo.MongoClient(host='localhost',port=27017)

选择或创建数据库

toutiao = conn['toutiao']

选择或创建数据集合

newsdata = toutiao['news']

插入一行数据:

newsdata.insert_one(data)

查询数据

newsdata.find()

如此,简单地对数据进行数据库存储就完成了。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2017-02-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码农二狗

使用shell搜索匹配文件

1023
来自专栏python3

解决centos7 /etc/rc.local 不能执行

最近发现centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了

1092
来自专栏PHP技术大全

PHP使用elasticsearch搜索安装及分词方法

那mysql匹配的时候是like模糊匹配,搜索必须要有SQL注入这四个字,连续的才能查找到那这样会不太方便。

1382
来自专栏xingoo, 一个梦想做发明家的程序员

Head插件——学习Elasticsearch的锋刃利器!

在学习Elasticsearch的过程中,必不可少需要通过一些工具查看es的运行状态以及数据。如果都是通过rest请求,未免太过麻烦,而且也不够人性化。 此...

2346
来自专栏技术博文

关于解决emoji表情的存储

近段时间处理,由于工作需求,需要使得用户插入的emoji表情能够正常显示及使用,所以做个总结,以备后用。 说明:本方法只在mysql环境中测试 1.首先程序在连...

30810
来自专栏FreeBuf

搭建属于你自己的维基站点:MediaWiki

MediaWiki 是一个全球著名的开源的,运行于 PHP+MySQL 环境下的 wiki 程序 。例如,全球最大的 wiki 项目 维基百科,就是使用 Med...

4086
来自专栏Linux运维学习之路

MySQL体系结构及多实例

MySQL客户端和服务器端模型 MySQL是一个典型C/S,服务器端与客户端两部分组成 服务器端程序  mysqld mysql自带的客户端(mysql mys...

34512
来自专栏杨建荣的学习笔记

11g中关于控制文件自动备份的改进(r6笔记第22天)

在之前做一个测试演示的时候,使用的是11gR2的库,在说rman的备份配置的时候有一个功能时控制文件的自动备份, CONFIGURE CONTROLFILE ...

3284
来自专栏日常分享

Oracle常用数据库系统表单以及SQL的整理

  因为最近涉及到了一些数据库的归档,备份等工作,所以一部分的重心放在了数据库上,毕竟之前对数据库的了解也只停留在了一般的建表,查询,最多最多再写一写触发器之类...

811
来自专栏云计算教程系列

如何在Ubuntu 18.04上使用PostgreSQL 10设置逻辑复制

在为生产设置应用程序时,准备好多个数据库副本通常很有用。保持数据库副本同步的过程称为复制。复制可以为大量同时读取操作提供高可用性水平扩展,同时减少读取延迟。它还...

1485

扫码关注云+社区