我正在尝试收集有关“寻求Alpha”的评论(例如:https://seekingalpha.com/article/4243835-teslas-low-2019-capex-harm-growth-story-brand-value)。我列出了使用引号中的代码收集的注释之一。我使用的代码是().text(也在末尾列出)。
问题在于,有时它可以正确返回撇号(')(如第一段中的“波音”),但在其他时候,它可以返回“—(例如,“波音”中的“美国”)。第二段]。
“ @ trentbridge天哪,这是一个愚蠢的争论。来自波音官方网站(提示:他们不认为自己是TECH公司)
一般信息。波音公司是全球最大的航空航天公司,也是商业飞机,国防,太空和安全系统以及售后支持服务提供商的领先制造商。作为美国最大的制造业出口国,该公司为150多个国家/地区的航空公司和美国及相关政府客户提供支持。
...”
收集所有内容后,我可能只用“'”替换所有“—。但是,我确实更想找出一种方法来拒绝一开始就输入错误的字符。
任何帮助将不胜感激!
[comment.text for comment in driver.find_elements_by_class_name('b-c-content')]
答案 0 :(得分:2)
您的问题是,被误解的撇号不是普通的撇号字符'
,而是正确的单引号’
的Unicode字符。变成mojibake的原因是您解码的内容不正确。它以UTF-8格式(因此’
由三个字节\xe2\x80\x99
表示),但是您正在使用代码页1252对其进行解码(其中三个字节\xe2\x80\x99
代表三个单独的字符,{ {1}},â
和€
)。
由于您没有显示太多代码,因此我无法提供有关解决解码问题的任何建议,但是可能有一种方法可以请求Selenium使用UTF-8(坦率地说,这不是默认)。另外,您也许可以获取原始字节并自行解码文本。
虽然最好避免误解码,但是如果您真的需要在将字符串转换为mojibake之后对其进行修复,则最好的方法可能是使用与错误相同的方式重新编码它们,解码,然后再次解码,这次正确:
™