栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

网站的Python正确编码(BeautifulSoup)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

网站的Python正确编码(BeautifulSoup)

您犯了两个错误;您对编码的处理不当,并且将结果列表视为可以安全地转换为字符串而不丢失信息的内容。

首先,不要使用

response.text
!此处不是BeautifulSoup错误,您正在重新编码Mojibake。当服务器未明确指定编码时,该
requests
库将对
text/*
内容类型默认使用Latin-1编码,因为HTTP标准指出这是默认设置。

请参阅
高级

文档
的“
编码” 部分
__

唯一的一次请求不会做到这一点,如果没有明确的字符集是存在于HTTP头 ,并

Content-Type
头中包含
text

在这种情况下,RFC
2616指定默认字符集必须为
ISO-8859-1
。在这种情况下,请求遵循规范。如果需要其他编码,则可以手动设置
Response.encoding
属性,或使用raw
Response.content

大胆强调我的。

传递

response.content
原始数据:

soup = BeautifulSoup(r.content)

我看到您使用的是BeautifulSoup3。您确实想升级到BeautifulSoup
4。第3版已于2012年停产,并包含多个错误。安装

beautifulsoup4
项目,并使用
frombs4 import BeautifulSoup

BeautifulSoup
4通常可以很好地找出解析时使用的正确编码,无论是从HTML

<meta>
标记还是对提供的字节进行统计分析。如果服务器确实提供了字符集,您仍然可以从响应中将其传递给BeautifulSoup,但是如果
requests
使用默认值,请首先进行测试:

encoding = r.encoding if 'charset' in r.headers.get('content-type', '').lower() else Nonesoup = BeautifulSoup(r.content, from_encoding=encoding)

最后但并非最不重要的一点是,使用BeautifulSoup 4,您可以使用

soup.get_text()
以下命令从页面中提取所有文本:

text = soup.get_text()print text

您正在将 结果列表
(的返回值

soup.findAll()
)转换为字符串。这永远都行不通,因为Python中的容器会在
repr()
列表中的每个元素上使用以生成
调试字符串 ,对于字符串而言,这意味着您会获得所有非可打印ASCII字符的转义序列。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641505.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号