Python网络数据采集之存储数据|第04天

User:你好我是森林 Date:2018-03-31 Mark:《Python网络数据采集》 原文:https://chensenlin.cn/posts/60544/))

网络采集系列文章

Python网络数据采集之创建爬虫

Python网络数据采集之HTML解析

Python网络数据采集之开始采集

Python网络数据采集之使用API

存储数据

网络数据的采集,最本质的东西还是数据,我们爬取的数据是需要存储的。

媒体文件

存储媒体文件有两种主要的方式:只获取文件 URL 链接,或者直接把源文件下载下来。

可以通过媒体文件所在的URL 链接直接引用它。这样做的优点如下:

  • 爬虫运行得更快,耗费的流量更少,因为只要链接,不需要下载文件;
  • 可以节省很多存储空间,因为只需要存储URL链接就可以;
  • 存储URL的代码更容易写,也不需要实现文件下载代码;
  • 不下载文件能够降低目标主机服务器的负载。

于此同时还会有一些缺点:

  • 网站防盗链的问题,会带来很多的麻烦;
  • 自主性较差,因为文件在别人的服务器上,可支配性差;
  • 链接可能是会变化的,失效的链接数增加。
  • ....

下载文件的方法也很简单,在Python 3.x 版本中,urllib.request.urlretrieve可以根据文件的 URL 下载文件;

例如我们从http://pythonscraping.com 下载 logo图片,然后在程序运行的文件夹里保存为 logo.jpg 文件。

from urllib.request import urlretrieve
from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen('http://www.pythonscraping.com')
bs = BeautifulSoup(html, 'html.parser')
imageLocation = bs.find('a', {'id': 'logo'}).find('img')['src']
urlretrieve (imageLocation, 'logo.jpg')

下载文件需要注意exe的文件,木马文件等。不要在硬盘存储敏感信息,不要用管理员权限运行他。

把数据存储到CSV

CSV(Comma-Separated Values,逗号分隔值)是存储表格数据的常用文件格式。关于CSV格式的文件不做过多的介绍,自行去了解一下。

Pythoncsv库可以创建或者修改CSV文件。

import csv 

csvFile = open("./demo.csv","w+")

try:
    writer = csv.writer(csvFile)
    writer.writerow(('number', 'number plus 2', 'number times 2'))
    for i in rang(10):
        writer.writerow((i,i+2,I*2))
finally:
    csvFile.close()

如果文件不存在就会创建demo.csv。

MySQL

MySQL是目前最受欢迎的开源关系型数据库管理系统。因为它受众广泛,免费,开箱即用,所以它也是网络数据采集项目中常用的数据库。

我采用的是Mac的平台,可以直接下载安装安装也可以通过包管理器(例如homebrew)安装。

官网下载地址:http://dev.mysql.com/downloads/mysql/

其他的平台可以去官网查看安装详情,作为一个改变世界的程序猿,安装软件应该不是问题。

基本命令

创建数据库:

CREATE DATABASE demo;

使用数据库:

USE demo;

创建表:

CREATE TABLE user(
    id BIGINT(7) NOT NULL AUTO_INCREMENT,
    name VARCHAR(10),
    sex tinyint(1),
    creatime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(id)
);

和数据库不同,MySQL 数据表必须至少有一列,否则不能创建。为了在 MySQL 里定义字段(数据列),你必须在 CREATE TABLE <tablename> 语句后面,把字段的定义放进一个带括号的、内部由逗号分隔的列表。

插入数据:

INSERT INTO user (name, sex) VALUES ("name", "1");

查询数据:

SELECT * FROM user 

模糊查询:

SELECT id FROM user LIKE "%chensenlin.cn%"

删除数据:

DELELT FROM user WHERE id = 1

更新数据:

UPDATE user SET name = 'chensenlin' WHERE id = 66

特别强调:更新或者删除一定要加条件!否则就说灾难,哈哈哈

与Python整合

Python没有内置的MySQL 支持工具。不过,有很多开源的库可以用来与 MySQL做交互,Python 2.xPython 3.x版本都支持。最有名的一个库就是PyMySQL(https://github.com/PyMySQL/PyMySQL)

安装:

pip install PyMySQL

基本使用:

import pymysql

conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock',user='root', passwd=root, db='mysql')

cur.execute("USE demo")
cur.execute("SELECT * FROM user WHERE id = 1") print(cur.fetchone())
cur.close()
conn.close()

Email

Python发送一封邮件:

import smtplib
from email.mime.text import MIMEText

msg = MIMEText("邮件正文内容")
msg['Subject'] = "这是一个测试有奖主题"
msg['From'] = "fore@gmail.com"
msg['To'] = "hellosenlin@sina.cn"
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()

与网页通过HTTP协议传输一样,邮件是通过SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)传输的。而且,和网络服务器的客户端(浏览器)处理那些通过 HTTP 协议传输的网页一样。

可以将其封装成函数作为发送邮件定时使用等。

原文地址:https://chensenlin.cn/posts/60544/

欢迎你免费加入我的星球,一起分享,共同成长。

知识星球

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

腾讯游戏DBA利刃 - SQL审核工具介绍

作者介绍 ? 韩全安(willhan) 华中科技大学,硕士,现代数据库方向。2013年毕业,就职于腾讯到今,工作项目:TMySQL、SQL审核、InnoDB列压...

1.2K6
来自专栏沃趣科技

初相识 | 全方位认识 sys 系统库

前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库。在我们的发布计划中为什么要把p...

2203
来自专栏数据和云

Library Cache优化与SQL游标

? 冷菠 冷菠,网名悠然(个人主页http://www.orasky.net),资深DBA,著有《Oracle高性能自动化运维》,有近10年的数据库运维、团队...

2885
来自专栏不想当开发的产品不是好测试

mysql 删表引出的问题

背景 将测试环境的表同步到另外一个数据库服务器中,但有些表里面数据巨大,(其实不同步该表的数据就行,当时没想太多),几千万的数据!! 步骤 1. 既然已经把数据...

2817
来自专栏Netkiller

数据库与图片完美解决方案

目录 1. 背景 2. 解决思路 3. 解决方案 4. plugin 的开发与使用 5. 在事务中使用该插件 6. 通过触发器调用图片处理函数 1. 背景 我以...

2885

使用 Excel 分析 CloudStack 使用记录

注:本文最初由 David Nailey 在 Build a Cloud 博客上撰写。

2169
来自专栏性能与架构

格式化SQL来提高效率

对SQL语句进行格式化不会让其运行得更快,但对我们的工作效率是有很大好处的 (1)提高SQL的可读性大大提高,便于维护 (2)提高开发效率,方便测试 例如 ? ...

3469
来自专栏开发

Mysql学习之优化总结(1)--从mysql查询过程看优化

提到mysql查询优化,很多人脑海里可能会想到NOT NULL、合理索引、不使用select *、合适的数据类型等等,可是这些优化技巧是怎么来的?

4367
来自专栏性能与架构

Mysql Query Cache的负面影响

Query Cache确实是以比较简单的实现带来巨大性能收益的功能。但可能很多人都忽略了使用QueryCache之后所带来的负面影响 (1)Query的hash...

3608
来自专栏Seebug漏洞平台

MySQL远程代码执行/权限提升漏洞的分析与实践(CVE-2016-6662)

本文作者:安全小飞侠,原文链接:http://avfisher.win/archives/593 0x00 背景 2016年9月12日,国外安全研究人员Dawi...

4025

扫码关注云+社区

领取腾讯云代金券