爬取网站时返回的html是乱码问题解决

问题描述

在爬取网站新闻时发现,返回的html代码中中文是乱码

headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0”,
“Accept”: “text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8”,
“Accept-Language”: “zh-CN”,
“Accept-Encoding”: “gzip, deflate, br”,
“Referer”: “http://www.sdyu.edu.cn/index.htm”,
}
url=‘http://www.tangsanshu.com/shengxu/’
a = requests.get(url=url,headers=headers).text
print(a)

在这里插入图片描述
对页面代码进行分析,发现页面是以utf-8格式编码的
在这里插入图片描述

解决思路

将get到的结果先转换为utf-8格式编码,之后再获取text属性

a = requests.get(url=url,headers=headers)
a.encoding='utf-8'
a=a.text

将get到的text结果先编码,后解码

a = requests.get(url=url,headers=headers).text.encode('latin-1').decode('utf-8')

为什么要先编码后解码,直接utf-8解码不行吗?

答案是否定的

print(type(requests.get(url=url,headers=headers)))
print(type(requests.get(url=url,headers=headers).text))
print(type(requests.get(url=url,headers=headers).text.encode('latin-1')))
print(type(requests.get(url=url,headers=headers).text.encode('latin-1').decode('utf-8')))
---------------------------------
<class 'requests.models.Response'>
<class 'str'>
<class 'bytes'>
<class 'str'>

decode不能直接对字符串进行解码,所以要先将获取到的text字符串转码。

### 解决Mac Excel中从网站爬取数据后出现乱码问题 在处理从网站爬取的数据,编码问题是一个常见的挑战。尤其是在将数据保存为CSV文件并在Mac的Excel中打开,可能会遇到中文或其他非ASCII字符的乱码问题。以下是针对该问题的专业解决方案: #### 1. 数据爬取阶段 在使用爬虫工具(如`requests`或`Selenium`)获取网页内容,确保正确设置编码。例如,当使用`requests`库,可以手动指定编码格式[^3]: ```python import requests response = requests.get(url) response.encoding = 'utf-8' # 确保使用正确的编码格式 data = response.text ``` 对于动态加载的页面,可以使用`Selenium`来抓取渲染后的HTML内容。`Selenium`默认会处理编码问题,但仍然需要验证返回的内容是否符合预期。 #### 2. 数据存储阶段 在将数据写入CSV文件,推荐使用`pandas`库,因为它提供了对编码的良好支持。以下是一个示例代码[^1]: ```python import pandas as pd # 假设 data 是一个包含爬取结果的字典列表 df = pd.DataFrame(data) # 将数据保存为 CSV 文件,并指定编码为 UTF-8 df.to_csv('output.csv', index=False, encoding='utf-8-sig') ``` 注意:`utf-8-sig`是一种带BOM(Byte Order Mark)的UTF-8编码格式,能够更好地兼容Microsoft Excel。 如果不想使用`pandas`,也可以通过标准库`csv`和`codecs`实现类似功能: ```python import csv import codecs with codecs.open('output.csv', 'w', encoding='utf-8-sig') as f: writer = csv.writer(f) writer.writerow(['列1', '列2']) # 写入表头 writer.writerows(data) # 写入数据 ``` #### 3. Excel 打开阶段 即使正确保存了CSV文件,Mac版Excel有仍可能无法自动识别编码。在这种情况下,可以尝试以下方法: - **手动调整编码**:在Excel中选择“文本导入向导”,并指定文件编码为UTF-8。 - **使用其他工具打开**:如果Excel仍然显示乱码,可以尝试使用Numbers(Mac自带)或Google Sheets打开文件,这些工具通常具有更好的编码兼容性。 #### 4. 其他注意事项 - 如果网页中包含`<br>`标签等特殊HTML元素,建议在提取文本前进行清理,以避免影响最终结果[^2]。 - 在调试过程中,可以通过打印原始数据或保存中间文件来验证编码是否正确。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门一刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值