Python网络数据采集7(译者:哈雷)
2016-08-11 14:33
375 查看
第五章 存储数据
本章主要讲述使用MYSQL数据库存取数据,其各种优点就不详述了,直接上干货。linux安装如下:
本章主要讲述使用MYSQL数据库存取数据,其各种优点就不详述了,直接上干货。linux安装如下:
sudo apt-get install mysql-server
安装完成之后就可以连接mysql了,连接MYSQL: 格式: mysql -h主机地址 -u用户名 -p用户密码 连接本机:mysql -uroot -p123 (示例) 连接远程服务器:mysql -h 192.168.1.1 -uroot -p123(示例) 退出:exit或者quit 退出编辑:\c 或者 ; mysql基本命令:
1.CREATE DATABASE scraping; 2.USE scraping; 3.CREATE TABLE pages; 4.CREATE TABLE pages (id BIGINT(7) NOT NULL AUTO_INCREMENT, title VARCHAR(200),content VARCHAR(10000), created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id)); 5.DESCRIBE pages; 6. INSERT INTO pages (title, content) VALUES ("Test page title", "This is some test page content. It can be up to 10,000 characters long."); 7.INSERT INTO pages (id, title, content, created) VALUES (3, "Test page title", "This is some test page content. It can be up to 10,000 characters long.", "2014-09-21 10:25:32"); 8.SELECT * FROM pages WHERE id = 2; 9.SELECT * FROM pages WHERE title LIKE "%test%"; 10.SELECT id, title FROM pages WHERE content LIKE "%page content%"; 11.DELETE FROM pages WHERE id = 1; 12.UPDATE pages SET title="A new title", content="Some new content" WHERE id=2; 13.DROP database aaa; show databases;
下面分别对上述12条语句解释。 1. 创建数据库,名称为scraping 2. 使用数据库(选定) 3. 在选定的数据库中创建表 pages。提示出错,原因是创建表格时必须存在列,故正确方式如4. 4. 正确的创建表的方式,创建了4列 5.查看创建的表pages 6.插入title和content信息 7.也能自行插入id和created列,但是不建议,mysql自动管理主键id(每次加1)和时间 8.选择id=2的所有行 9.选择title中有test的所有行 10.选择content中有page content的id 和 title单元 11.删除id=1的所有行 12.更新id=2的相关信息 13. 删除aaa数据库 首先安装PyMySql包,如下
curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-0.6.2 | tar xz cd PyMySQL-PyMySQL-f953785/ python setup.py install
完成之后即可用python调用mysql。在爬取数据的时候,可能会遇到编码问题,书中给了一个比较繁琐的方法,就是每次对每个表每项数据都重新设置。本文暂且不解决该问题,有机会重新探讨。下面给一个书中的示例
from urllib.request import urlopen from bs4 import BeautifulSoup import datetime import random import pymysql conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock',user='root', passwd=None, db='mysql', charset='utf8')#创建一个连接 cur = conn.cursor()#创建一个游标,相当于一个对象,如果要对多个表进行操作可以创建多个对象 cur.execute("USE scraping")#对象.方法() 使用scraping表格 random.seed(datetime.datetime.now()) def store(title, content):#类似的使用对象.方法()来操作数据库 cur.execute("INSERT INTO pages (title, content) VALUES (\"%s\",\"%s\")", (title, content)) cur.connection.commit() def getLinks(articleUrl): #爬取数据 html = urlopen("http://en.wikipedia.org"+articleUrl) bsObj = BeautifulSoup(html) title = bsObj.find("h1").find("span").get_text() content = bsObj.find("div", {"id":"mw-content-text"}).find("p").get_text() store(title, content) return bsObj.find("div", {"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$")) links = getLinks("/wiki/Kevin_Bacon") try: while len(links) > 0: newArticle = links[random.randint(0, len(links)-1)].attrs["href"] print(newArticle) links = getLinks(newArticle) finally: cur.close()#使用完数据库操作后要及时关闭游标和连接,因为游标和连接不会自动关闭,这样能避免数据库出现问题 conn.close()
当然避免过多的对数据库的访问,还能通过改善表格的设计来实现,这就需要大家参考数据库的相关知识了。设计好数据库后可以编写SQL语句来创建数据库,而不必在命令行中创建。
相关文章推荐
- Python网络数据采集6(译者:哈雷)
- Python网络数据采集5(译者:哈雷)
- Python网络数据采集10(译者:哈雷)
- python网络数据采集2(译者:哈雷)
- Python网络数据采集8(译者:哈雷)
- Python网络数据采集9(译者:哈雷)
- Python网络数据采集1(译者:哈雷)
- Python网络数据采集4(译者:哈雷)
- Python网络数据采集11(译者:哈雷)
- python网络数据采集3(译者:哈雷)
- Python网络数据采集一书中的错误
- Python网络数据采集
- 好书推荐:Python网络数据采集
- python 网络数据采集——媒体文件
- python网络数据采集的代码
- 笔记之Python网络数据采集
- python网络数据采集
- Python网络数据采集2-wikipedia
- O'Reilly精品图书推荐:Python网络数据采集
- python网络数据采集学习笔记:第二章