xpath获取标签属性乱码解决

问题在于解码和编码
修改前的代码

#-*- coding: utf-8 -*-

import requests
from lxml import etree

url = 'http://top.baidu.com/buzz?b=1&fr=20811'
response = requests.get(url)
r = etree.HTML(response.text)
item_list = r.xpath("//table[@class='list-table']//tr")
# print(item_list)
for i in item_list[1:]:
    first_name = i.xpath("./td[@class='first']/span")
    keyword_name = i.xpath("./td[@class='keyword']/a[@class='list-title']")
    try:
        print(first_name[0].text)
        print(keyword_name[0].text)
    except:
        pass
    print('***************************************************************')

打印输出 中文字全部为乱码

1
ÂêɯĸÇ×ÀϹ«³ö¹ì


2
ɱÓãµÜ¸¸×Ó´òÈË



3
·ÉÐÐÔ±Íü´øÔ¿³×



4
¿ì¹¸ß¹Ü±»ÅÐÎÞÆÚ


5
¶«º£º½¿ÕÔÙÏÖÎ¥¹æ


6
Ïȷ洴ʼÈËÈ¥ÊÀ


7
öª·æ·ñÈÏÇúÆæÖ°©


8
¹Â´æ6ɱ³Ô¼¦


9
IG 2:0 OMG


10
СS°®Çé±£ÏÊÊõ


11
Öйú0-2º«¹ú


12
Û¬ÁÖ¼¤¶¯Å­³â²ÃÅÐ


13
µÇ±´À³ÓëÕÅÁ¦ºÏÓ°


14
¼ÃÄÏÎ¥½¨±ðÊû±»²ð


15
ÎÞÏÞ¼« Ðļ¡Ëðº¦


16
â¹û»ØÓ¦Áõ»¶Í²Û


17
ÎâÒà·² 100Íò


18
Àî³ÐîçΪٶùÇìÉú


19
ħµÀ×æʦ±»Ëø


20
ÇжûÎ÷×â½èÒÁ¹ÏÒò


21
±´¿ËººÄ·°®È®


22
Æ»¹ûÊÐÖµ´óËõË®


23
×ß·¿´ÊÖ»ú·£10Ôª


24
¹ú¼ÊÓͼÛ×òÈÕÊÕÕÇ


25
¹ú×ãÂäºóº«¹ú


26
shadowÌæ²¹


27
ÉòÃγ½»ØÓ¦Âô¼Ù»õ


28
̨ÄÏŮͯÔâĸŰËÀ


29
Öк«´óÕ½Ê×·¢


30
ÖÐѧΪÀÏʦÉèÁµ°®¼Ù


31
ºú¾²ÆعâºÀÃÅÉú»î


32
¹ËÍ¢ìÇҪȢÈçÀ¼


33
Ó¢¹úÒé»á·ñ¾öÍÑÅ·


34
¿ÏÄáÑǾƵ걬ը


35
µÎµÎ°²È«ÔÙÉý¼¶


36
ÖÜÐdzÛÕÅ°ØÖ¥ÖؾÛ


37
Õã½­Ñغ£¸ßËÙ¿ªÍ¨


38
°×ÓîÐøÔ¼Ò¼ÐÄ


39
Ê®´ó×î¶Â»¥ÁªÍø¹«Ë¾


40
ÖܽÜÂ×ɹÂèÂè½üÕÕ


41
º®¼ÙÌìÊýÅÅÐаñ


42
°ëÊý·ÉÐÐÔ±ÍËÐÝ


43
ºã´óÂò¶Ï±£ÀûÄá°Â


44
лª±£ÏÕÍò·åÀëÖ°


45
ÐðÀûÑDZ¬Õ¨


46
º«¾ç¹¬½«ÅÄÖйú°æ


47
½ûֹδ³ÉÄêÈËÕûÈÝ


48
³ÂÒ⺭ÏëÂèÂè


49
Ê׸ÖÄÐÀº»÷°ÜÉϺ£


50
Ñî×ϹØÏþÍ® ÍÈ


处理方式:

先查看 response的编码
print(response.encoding)
然后对中文部分 encode('ISO-8859-1').decode('gbk')
附上修改过后的代码和输出

#-*- coding: utf-8 -*-

import requests
from lxml import etree

url = 'http://top.baidu.com/buzz?b=1&fr=20811'
response = requests.get(url)
print(response.encoding)
r = etree.HTML(response.text)
item_list = r.xpath("//table[@class='list-table']//tr")
# print(item_list)
for i in item_list[1:]:
    first_name = i.xpath("./td[@class='first']/span")
    keyword_name = i.xpath("./td[@class='keyword']/a[@class='list-title']")
    try:
        print(first_name[0].text.encode('ISO-8859-1').decode('gbk'))
        print(keyword_name[0].text.encode('ISO-8859-1').decode('gbk'))
    except:
        pass
    print('***************************************************************')
1
玛莎母亲老公出轨


2
佘诗曼回应蛇精脸



3
杀鱼弟父子打人



4
飞行员忘带钥匙


5
快鹿高管被判无期


6
先锋创始人去世


7
东海航空再现违规


8
IG 2:0 OMG


9
济南大白宫被拆


10
济南违建别墅被拆


11
登贝莱与张力合影


12
无限极 心肌损害


13
孤存6杀吃鸡


14
霆锋否认曲奇致癌


15
中国0-2韩国


16
郜林激动怒斥裁判


17
小S爱情保鲜术


18
业主割断安全绳


19
芒果回应刘欢吐槽


20
吴亦凡 100万


21
李承铉为女儿庆生


22
魔道祖师被锁


23
伊瓜因发烧


24
切尔西租借伊瓜因


25
贝克汉姆爱犬


26
苹果市值大缩水


27
走路看手机罚10元


28
国际油价昨日收涨


29
国足落后韩国


30
shadow替补


31
沈梦辰回应卖假货


32
中韩大战首发


33
台南女童遭母虐死


34
中学为老师设恋爱假


35
胡静曝光豪门生活


36
顾廷烨要娶如兰


37
英国议会否决脱欧


38
肯尼亚酒店爆炸


39
滴滴安全再升级


40
周星驰张柏芝重聚


41
浙江沿海高速开通


42
十大最堵互联网公司


43
周杰伦晒妈妈近照


44
寒假天数排行榜


45
半数飞行员退休


46
恒大买断保利尼奥


47
新华保险万峰离职


48
韩剧宫将拍中国版


49
叙利亚爆炸


50
禁止未成年人整容


你可能感兴趣的:(xpath,encoding,乱码)