Skip to main content
 首页 » 编程设计

python-3.x之Python Selenium ().text 返回 "’"而不是撇号 (')

2024年09月07日29lovecherry

我正在尝试收集关于 Seeking Alpha 的评论(例如:https://seekingalpha.com/article/4243835-teslas-low-2019-capex-harm-growth-story-brand-value)。我用引号中的代码列出了我收集的评论之一。我使用的代码是 ().text(也列在最后)。

问题在于,有时它可以正确返回撇号 (') [如第一段中的“Boeing's”],但有时会返回“â” [如第一段中的“America's”第二段]。

“@trentbridge 天哪,多么愚蠢的争论。来自波音公司的官方网站(提示:他们不认为自己是一家科技公司)

一般信息。波音公司是世界上最大的航空航天公司和领先的商用喷气客机、国防、空间和安全系统制造商以及售后支持服务提供商。作为美国最大的制造业导出商,该公司为 150 多个国家/地区的航空公司以及美国和盟国政府客户提供支持。

..."

有可能我收集完所有内容后就可以将所有“â”替换为“'”。但是,我确实更愿意找出一种方法来拒绝在第一时间输入错误的字符。

如有任何帮助,我们将不胜感激!

[comment.text for comment in driver.find_elements_by_class_name('b-c-content')] 

请您参考如下方法:

您的问题是,被误解的撇号不是普通的撇号字符 ',而是右单引号的 Unicode 字符:'。它变成 mojibake 的原因是您对内容的解码不正确。它是 UTF-8 格式的(因此 ' 由三个字节 \xe2\x80\x99 表示),但您使用代码页 1252 对其进行解码(其中三个字节\xe2\x80\x99 代表三个单独的字符,â)。

由于您没有显示太多代码,我无法就如何解决解码问题提供任何建议,但可能有一种方法可以请求 Selenium 使用 UTF-8(坦率地说,我很惊讶这不是默认)。或者,您可以获取原始字节并自行解码文本。

虽然最好避免错误解码,但如果您真的需要在将字符串转换为 mojibake 后修复它们,最好的方法可能是按照错误的方式重新编码它们-解码,然后再次解码,这次正确:

badtext = 'America’s' 
encoded = badtext.encode('cp1252')  
goodtext = encoded.decode('utf-8') # 'America’s'