xpath解析页面获取td内容中文乱码问题

抓取网站数据使用xpath处理,但是出现了乱码的情况,在使用etree函数前打印处理啊是不乱码的
但是,使用etree解析之后获取数据就出现了乱码的情况,这是什么情况?
我也查了些资料,但是试了下都无济于事。
https://segmentfault.com/a/11...

代码:

# coding:utf-8

import requests

from lxml import etree

headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'

}

index_url = 'http://113.140.66.226:8024/sxAQIWeb/PageCity.aspx?cityCode=NjEwMTAw'

index_res = requests.get(index_url, headers=headers)

html = etree.HTML(index_res.content)

form_data = {

'ctl00$ContentPlaceHolder1$ScriptManager1': 'ctl00$ContentPlaceHolder1$UpdatePanel1|ctl00$ContentPlaceHolder1$btnSearch',

'__EVENTTARGET': '',

'__EVENTARGUMENT': '',

'ctl00$ContentPlaceHolder1$city': 'PageCity.aspx?cityCode=NjEwMTAw',

'ctl00$ContentPlaceHolder1$d12': '2019-07-01',

'__VIEWSTATE': html.xpath("/html//input[@id='__VIEWSTATE']")[0].xpath('@value')[0],

'__VIEWSTATEGENERATOR': html.xpath("/html//input[@id='__VIEWSTATEGENERATOR']")[0].xpath('@value')[0],

'__EVENTVALIDATION': html.xpath("/html//input[@id='__EVENTVALIDATION']")[0].xpath('@value')[0],

'__ASYNCPOST': 'true',

'ctl00$ContentPlaceHolder1$btnSearch': '查 询',

}

result_res = requests.post(data=form_data, url=index_url, headers=headers)

result_html = etree.HTML(result_res.content)

tr_html_list = result_html.xpath('//table/tr')

for index, tr_html in enumerate(tr_html_list, 0):

if index == 0:

continue

print tr_html.xpath('td')[0].text.strip() # 日期

print tr_html.xpath('td')[1].text.strip() # 城市

print tr_html.xpath('td')[2].text.strip() # AQI

print tr_html.xpath('td')[3].text.strip() # 空气质量级别

print tr_html.xpath('td')[4].text.strip() # 级别

print tr_html.xpath('td')[5].text.strip() # 首要污染物

print tr_html.xpath('td')[6].text.strip() # 排名

break

结果:

xpath解析页面获取td内容中文乱码问题


回答:

result_res.content 改成 result_res.text 就可以了

纠正一下上面这个答案,我今天看了下官方文档,官方文档建议不要直接解析 Unicode 字符串,result_res.text 的返回值是 Unicode 字符串(我使用的Python3,也就是str类型)。
需要纠正的部分服下

result_res = requests.post(data=form_data, url=index_url, headers=headers)

result_html = etree.HTML(

result_res.content, parser=etree.HTMLParser(encoding='utf8'))

# 继续使用result_res.content,因为这样效率才高,

# 官方推荐手动设置一个带编码方案的解析器,

# 详见: https://lxml.de/FAQ.html#why-can-t-lxml-parse-my-xml-from-unicode-strings

# 出现此错误的原因是原HTML文本头中没有使用mate标记编码方案,导致解析器无法识别编码方案

# <head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><title>

目前觉得这是最好的方法


回答:

index_res = requests.get(index_url, headers=headers)

index_res.encoding = 'utf-8'

以上是 xpath解析页面获取td内容中文乱码问题 的全部内容, 来源链接: utcz.com/a/164835.html

回到顶部