python爬取数据练习(二)---lxml数据爬取后存储在数据库mysql中

上一篇文章我使用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。


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值