python爬取数据练习(二)---lxml数据爬取后存储在数据库mysql中
2017-12-26 11:14
656 查看
上一篇文章我使用BeautifulSouplist并存到excel中,这里我使用lxm,并保存在mysql中。
lxml主要使用到的函数是xpath这个函数,获取你要获取的便签的路径。
主要语法:
可以参考文章 http://blog.csdn.net/think_ma/article/details/78900436
from lxml import etree
def lxmlHtml(html):
con = etree.HTML(str(html))
print(etree.tostring(con))
pages = con.xpath('//div[@class="bd doulist-subject"]')
moviecount = len(pages)
images = con.xpath('//div[@class="post"]/a/img/@src')
movietitle = con.xpath('//div[@class="title"]/a/text()');
moviescore = con.xpath('//div[@class="rating"]/span[@class="rating_nums"]/text()');
movieactor = con.xpath('//div[@class="abstract"]/br[1]')
nameActor=[];
for item in movieactor:
conss = etree.HTML(etree.tostring(item));
string = conss.xpath('string()').strip();
print(string);
nameActor.append(string);
print(images)
print(nameActor)
print(moviescore)
print(movietitle)
savesql(nameActor,movietitle,moviescore,images);
写入mysql数据库
import pymysql
def savesql(names,titles,scores,images):
# 数据库的链接
global countnum;
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='XXXXXXXX', db='XXX',charset='utf8')
print(conn);
# 创建操作的游标
cursor = conn.cursor();
# 设置字符编码及自动提交
cursor.execute('set names utf8') # 固定格式
cursor.execute('set autocommit=1'); # 设置自动提交
# 编写SQL
k = 0;
for nametxt in names:
titletxt = titles[k].strip();
score = scores[k].strip();
image = images[k].strip();
print(score);
print(nametxt);
print("=========");
print(nametxt);
print(titletxt);
print("=========");
# sql2 = "DELETE FROM Movie WHERE id = 1";
sql = "insert into Movie(name,title,score,image,id) values(%s,%s,%s,%s,%s)";
print("sql语句:" + str(sql));
cursor.execute(sql,(nametxt,titletxt,score,image, countnum));
countnum = countnum + 1;
k = k+1;
cursor.close();
conn.close();
在写入数据库的时候遇到很多问题,其中一个就是解码问题,英文输入还好,如果是中文输入的时候就会出现乱码。
网上找好了很多才修改好
sql = sql.encode(self.encoding, 'surrogateescape')
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 47-48: ordinal not in range(256)
由于我用的是Navicat Premium 我直接在Navicat里修改了编码格式为uft-8
选择当前数据库下的一个表,然后选择Edit 出现下面的界面
改完之后,发现还会出现问题,在插入数据的表的字段下面看看编码格式,改完之后OK。
lxml主要使用到的函数是xpath这个函数,获取你要获取的便签的路径。
主要语法:
可以参考文章 http://blog.csdn.net/think_ma/article/details/78900436
from lxml import etree
def lxmlHtml(html):
con = etree.HTML(str(html))
print(etree.tostring(con))
pages = con.xpath('//div[@class="bd doulist-subject"]')
moviecount = len(pages)
images = con.xpath('//div[@class="post"]/a/img/@src')
movietitle = con.xpath('//div[@class="title"]/a/text()');
moviescore = con.xpath('//div[@class="rating"]/span[@class="rating_nums"]/text()');
movieactor = con.xpath('//div[@class="abstract"]/br[1]')
nameActor=[];
for item in movieactor:
conss = etree.HTML(etree.tostring(item));
string = conss.xpath('string()').strip();
print(string);
nameActor.append(string);
print(images)
print(nameActor)
print(moviescore)
print(movietitle)
savesql(nameActor,movietitle,moviescore,images);
写入mysql数据库
import pymysql
def savesql(names,titles,scores,images):
# 数据库的链接
global countnum;
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='XXXXXXXX', db='XXX',charset='utf8')
print(conn);
# 创建操作的游标
cursor = conn.cursor();
# 设置字符编码及自动提交
cursor.execute('set names utf8') # 固定格式
cursor.execute('set autocommit=1'); # 设置自动提交
# 编写SQL
k = 0;
for nametxt in names:
titletxt = titles[k].strip();
score = scores[k].strip();
image = images[k].strip();
print(score);
print(nametxt);
print("=========");
print(nametxt);
print(titletxt);
print("=========");
# sql2 = "DELETE FROM Movie WHERE id = 1";
sql = "insert into Movie(name,title,score,image,id) values(%s,%s,%s,%s,%s)";
print("sql语句:" + str(sql));
cursor.execute(sql,(nametxt,titletxt,score,image, countnum));
countnum = countnum + 1;
k = k+1;
cursor.close();
conn.close();
在写入数据库的时候遇到很多问题,其中一个就是解码问题,英文输入还好,如果是中文输入的时候就会出现乱码。
网上找好了很多才修改好
sql = sql.encode(self.encoding, 'surrogateescape')
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 47-48: ordinal not in range(256)
由于我用的是Navicat Premium 我直接在Navicat里修改了编码格式为uft-8
选择当前数据库下的一个表,然后选择Edit 出现下面的界面
改完之后,发现还会出现问题,在插入数据的表的字段下面看看编码格式,改完之后OK。
相关文章推荐
- Python爬虫数据存储MySQL【1】连接方式
- 基于Python Plotly 对 MySQL 存储数据的可视化初步
- mysql 图片存储到数据库中 python
- MySQL-Python 库插入数据到数据库中看不到数据
- 操作 Python爬虫数据存储MySQL【3】爬取信息
- python django中使用sqlite3数据库 存储二进制数据ByteArray
- Python数据存储之MySQL(下)
- python mysql 插入的数据是字典时,可以直接插入到数据库,不要进行for循环读取每一个字段
- Revit明细表读取、将明细表数据存储到sql server数据库、python读取数据库
- Python爬虫数据存储MySQL【2】模拟登录网页
- python爬取微博图片数据存到Mysql中遇到的各种坑\python Mysql存储图片
- Python脚本之django---mysql-记录主机性能数据到数据库-web站点管理数据库及web显示命令执行结果
- 一个MySQL清除数据库所有表数据保留表结构的存储过程
- [置顶] 【python 数据库写入】python把数据框数据写入mongodb、mysql
- python数据持久存储:pickle模块的基本使用 分类: python python基础学习 python 小练习 2013-06-17 14:41 209人阅读 评论(0) 收藏
- 如何解决python连接数据库编码问题(python传数据到mysql乱码)'ascii' codec can't encode _mysql_exceptions.OperationalError: (1366, "Incorrect string value:?
- python Mysql 数据库导入文本数据,中文乱码
- 使用RESTful Jersey框架搭建WebService,Hibernate框架访问数据库,MySQL存储数据
- 数据库--MySQL三种常用数据存储引擎
- 【Mysql之自我练习<一>】利用存储过程,造大量测试数据(注:私用的,为了不遗失)