解决lxml 解析非utf-8编码网页的方法

编码问题是一个老问题了,python3中默认编码方式使utf-8,lxml默认解析方式也是utf-8,但是仍然有很多编码方式为gb2312 和gbk 的网页存在,在爬取和解析的过程中我们如何解决呢?

python3 相较于python2 来说做了很多改变,取消了Unicode函数,所以很多网上的方法行不通了。多次尝试之后,下面这种方法比较有效。

headers={'User_Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}

url='http://www.qiubaichengren.com/gif/list_2.html'

html = requests.get(url,headers=headers)##调用request函数把套图地址传进去会返回给我们一个response

print(u'网页数据总长度是: \d',len(html.text))


解决方案来了,太坑爹了……


html.encoding = 'gb2312'    #先声明网页的编码方式

page = etree.HTML(html.content)  #直接解析content,而不是text ,parse方法不知道content是否可以

#print (html.text)

nodes_title = page.xpath('//div[@class="mtitle"]//text()')

print(len(nodes_title))

#8

print(nodes_title[0])

#老板,出个价吧

nodes_imgurl = page.xpath('//div[@style="text-align: center;"]//img/@src')

print(len(nodes_imgurl))

#8

print(nodes_imgurl[0])

#http://wx2.sinaimg.cn/mw690/8903e1f3gy1ffq18eskojg20b4069e81.gif

ps:xpath方法的确很高效,而且可读性和可理解性要强于正则表达式  xpath是否可以提取多个数据呢?

你可能感兴趣的:(解决lxml 解析非utf-8编码网页的方法)