Python爬虫XPath解析出乱码的问题及解决

 更新时间:2024年05月24日 15:32:27   作者:平人的进步日常  
这篇文章主要介绍了Python爬虫XPath解析出乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Python爬虫XPath解析出乱码

请求后加上编码

resp = requests.get(url, headers=headers)
resp.encoding = 'GBK'

Python XPath解析html出现⋆解决方法 html出现{

爬网页又遇到一个坑,老是出现a乱码,查看html出现的是&#数字;这样的。

网上相关的“Python字符中出现&#的解决办法”又没有很好的解决,自己继续冲浪,费了一番功夫解决了。

这算是又加深了一下我对这些iso、Unicode编码的理解。故分享。

问题

用Python的lxml解析html时,调用text()输出出来的结果带有a这样的乱码:

网页原页面展示:

爬取代码:

url = "xxx"
 
response = requests.request("GET", url)
 
html = etree.HTML(response.text)
 
# 直接调用text函数
description = html.xpath('//div[@class="xxx"]/div/div//text()')
# 直接打印
for desc in description:
    print(desc)

原因

不用说自然是编码的问题。下面教大家排查和解决。

排查与解决

首先查看返回的响应是如何编码的:

response = requests.request("GET", url, proxies=proxy)
# 得到响应之后,先检查一下它的编码方式
print(response.encoding)

结果如下:

然后根据这个编码的方式再来解码:

html = etree.HTML(response.text)
 
description = html.xpath('//div[@class="xxx"]/div/div//text()')
 
for desc in description:
    # print(desc)
    # 根据上面的结果,用iso88591来编码,再解码为utf-8
    print(desc.encode("ISO-8859-1").decode("utf-8"))

结果如下:

完整代码:

url = "xxx"
 
response = requests.request("GET", url)
print(response.encoding)
 
html = etree.HTML(response.text)
 
description = html.xpath('//div[@class="xxx"]/div/div//text()')
 
for desc in description:
    print(desc.encode("ISO-8859-1").decode("utf-8"))
    # print(desc)

总结

网上有用python2流传下来的HTMLParser的,还有用python3的html包的,效果都不好。

不过也有改response的编码方式的,就是这样:

url = "xxx"
 
response = requests.request("GET", url)
 
# html = etree.HTML(response.text)
html = etree.HTML(response.content)  # 改用二进制编码
 
# 直接调用text函数
description = html.xpath('//div[@class="xxx"]/div/div//text()')
# 直接打印
for desc in description:
    print(desc)

也能成功解析。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用Python批量生成任意尺寸的图片

    利用Python批量生成任意尺寸的图片

    不知道大家有没有遇到过,因检验需要1000张,分别从1*1到1000*1000像素的图片。搜索一番过后发现还是Python实现比较方便,遂决定用Python实现这一功能,下面分享给大家,有需要的可以参考。
    2016-08-08
  • Python设计模式之模板方法模式实例详解

    Python设计模式之模板方法模式实例详解

    这篇文章主要介绍了Python设计模式之模板方法模式,结合实例形式较为详细的分析了模板方法模式的概念、原理及Python定义、使用模板方法模式相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python下载Pandas包的步骤

    Python下载Pandas包的步骤

    这篇文章主要介绍了Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大家介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • 用Python解数独的方法示例

    用Python解数独的方法示例

    这篇文章主要介绍了用Python解数独的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • pyhton列表转换为数组的实例

    pyhton列表转换为数组的实例

    下面小编就为大家分享一篇pyhton列表转换为数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python vtk读取并显示dicom文件示例

    Python vtk读取并显示dicom文件示例

    今天小编就为大家分享一篇Python vtk读取并显示dicom文件示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Pandas数据处理库画图与文件读取使用示例

    Pandas数据处理库画图与文件读取使用示例

    这篇文章主要为大家介绍了Pandas数据处理库画图与文件读取使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Python-with open() as f的用法及说明

    Python-with open() as f的用法及说明

    这篇文章主要介绍了Python-with open() as f的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python队列RabbitMQ 使用方法实例记录

    Python队列RabbitMQ 使用方法实例记录

    这篇文章主要介绍了Python队列RabbitMQ 使用方法,结合实例形式分析了Python队列RabbitMQ创建队列发送消息与创建消费者消费信息相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • python 用递归实现通用爬虫解析器

    python 用递归实现通用爬虫解析器

    这篇文章主要介绍了python 用递归实现通用爬虫解析器的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04

最新评论