编码问题是一个老问题了,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是否可以提取多个数据呢?