上一篇文章我使用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')由于我用的是Navicat Premium 我直接在Navicat里修改了编码格式为uft-8
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 47-48: ordinal not in range(256)
选择当前数据库下的一个表,然后选择Edit 出现下面的界面
改完之后,发现还会出现问题,在插入数据的表的字段下面看看编码格式,改完之后OK。