您的位置:首页 > 编程语言 > Python开发

使用python爬虫抓取页面之后,将页面保存到Mysql数据库中

2015-08-06 18:38 701 查看
#首先抓取html页面内容,为了安全起见,有关url内容和mysql连接内容都以星号代替

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}

req = urllib2.Request(url='******',headers=headers);

httpContent = urllib2.urlopen(req).read()

db = MySQLdb.connect(host='******',user='******',passwd='******',db='******',port=3306,charset='utf8')#获取数据库连接,根据数据库设计的编码,设置编码为utf-8

cur=db.cursor()

sql = 'INSERT INTO pageContents (pageContent,queryTerm,querySource,queryTime,queryType) values(%s,%s,%s,%s,%s)' #写入数据库

#pageContent栏位是MediumBlob类型,数据库中专门存储文件和二进制流。

cur.execute(sql,(str,'测试用数据1','百度','2015/8/5',''))

cur.close()

db.close()

读取的时候使用:

cur=db.cursor()

cur.execute('select * from pageContents')

cur.fetchone()

data = cur.fetchone();

cur.close()

db.close()

mysql的blob类型分为四类:

TinyBlob 最大 255字节

Blob 最大 65K

MediumBlob 最大 16M

LongBlob 最大 4G

根据自己存储的内容大小来指定类别。选大了会浪费空间

最后谈一谈遇见的坑吧。。

当时在网上找了找示例代码。

在insert的时候,针对要存的文件,都是用了Mysqldb.escape_string()方法。

但是!!!

这就是坑的所在了!

使用escape_string()方法来处理html文件的时候。会把各种符号给你转义出来!转义出来!转义出来!

什么意思呢?

换行会转义成\r\n,冒号会转义成个\"。

比如你有一段html代码是:

<!DOCTYPE html>

<html><!--STATUS OK--><head><meta name="referrer" content="always">

它会给你转成

<!DOCTYPE html>\r\n<html><!--STATUS OK--><head><meta name=\"referrer\" content=\"always\">

看出区别了吗?

换行被显式转义出来了,冒号也出来了。

导致的结果是什么?

当你从数据库去读出html文件的时候,你满心期待地打开文件,结果出来的全是乱码。乱码。。乱码。。。

最后试过了n多种方法,最开始以为是编码问题,因为python默认编码是ascii码,就用转码转成utf8,结果不行。

后来以为读取blob出来的内容是个字符数组,还费尽心思地把返回值构建成字符串str,

最后发现这货读取出来的就是个字符串!

把所有可能都试过了之后,最后就把问题定位到了insert的时候。

解决方法就是在insert的时候不用Mysqldb.escape_string()这个方法,直接把html字符串丢去insert就行了。。

以上,解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: