抓取网站数据使用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
结果:
纠正一下上面这个答案,我今天看了下官方文档,官方文档建议不要直接解析 Unicode 字符串,result_res.text 的返回值是 Unicode 字符串(我使用的Python3,也就是str类型)。
需要纠正的部分服下
目前觉得这是最好的方法