最近刚开始使用python来做爬虫爬取相关数据,使用了python自带的urllib和第三方库requests,解析html使用了beautifulsoup以及lxml
这里说下lxml,lxml是python的一个html、xml解析库,lxml使用XPath能快速,简单的定位元素并获取信息。下面进入正题
1. 遇到的中文乱码问题
1.1 简单的开始
使用requests来拔取网站内容十分方便,一个最简单的代码段只需要2-3行代码就行。
点击(此处)折叠或打开
url = 'h.com/'
req = requests.get(url)
print(req.text)
tree = html.fromstring(req.text)
print(tree.xpath("//h1[@class='title']/text()"))
上面的代码段起作用的也就3行(2,4,5)代码就获取到我们想要的内容。当然还要导入一系列的包,比如说requests、lxml、html等。当然由于ht.com/是英文网站,不存在中文乱码问题。点击(此处)折叠或打开
url = 'hemierleague/index.shtml'
print(tree.xpath("//span[@class='sec_blk_title']/text()"))
运行程序可以发现,在语句print(req.text)输出的内容中,中文字体已经是乱码了。最后的结果输出是['?????©è§\x86é?\x91', '??\x80?\x9c\x9f?\x9b\x9eé??']点击(此处)折叠或打开
print(req.headers['content-type'])
print(req.encoding)
print(req.apparent_encoding)
print(requests.utils.get_encodings_from_content(page_content.text))
输出结果分别是:点击(此处)折叠或打开
if req.encoding == 'ISO-8859-1':
encodings = requests.utils.get_encodings_from_content(req.text)
if encodings:
encoding = encodings[0]
else:
encoding = req.apparent_encoding
encode_content = req.content.decode(encoding, 'replace').encode('utf-8', 'replace')