【问题标题】:Python, Beautiful Soup: &reg - how to convert to proper regmarkPython, Beautiful Soup: &reg - 如何转换为正确的 regmark
【发布时间】:2012-02-03 18:54:18
【问题描述】:

我正在抓取一个网页,其中包含在浏览器中看起来像这样的 HTML

<td>LGG&reg; MAX multispecies probiotic consisting of four bacterial trains</td>
<td>LGG® MAX helps to reduce gastro-intestinal discomfort</td>

仅以 LGG® 为例,第一个实例是 LGG&amp;reg; 在第二个实例中,® 在源代码中写为 ®

我正在使用 Python 2.7、mechanize 和 BeautifulSoup。

我的难点是&amp;reg;被机械化提升,并被执行,最终被打印出来或写入文件。

还有许多其他特殊字符。有些在输出上被“转换”,而® 被转换为混乱。

网页被声明为 UTF-8,我对编码的唯一参考是当我打开我的输出文件时。我已经声明了 UTF-8。如果我不在其他角色上写入文件炸弹。

我正在使用 Windows 7。其他详细信息:

>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'cp850'
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
>>>

谁能给我一些关于处理特殊字符的最佳方法的提示?还是应该将它们称为 HTML 实体?这一定是一个相当普遍的问题,但我无法在网上找到任何直截了当的解释。

更新:我在这里取得了一些进展。 基本算法是

  1. 在 mechanize 中阅读网页
  2. 用漂亮的汤做什么..我写下来我不知道 这个预处理阶段到底是做什么用的。
  3. 使用漂亮的汤从表中提取信息 除了特殊字符的处理之外,有序。
  4. 将信息写入由 | 分隔的文件占 长单元格条目中的标点符号并允许导入 Excel 等

进度处于第 3 阶段。我使用了一些正则表达式和 htmlentityrefs 逐个单元格条目来更改代码单元格条目。见this blog post

剩余的困难:写入文件(并打印到屏幕)的代码仍然不正确,但问题现在似乎是正确指定编码的问题。至少问题看起来更小了。

【问题讨论】:

标签: python beautifulsoup html-entities


【解决方案1】:

从标题回答问题:

# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup

html = u"""
<td>LGG&reg; MAX multispecies probiotic consisting of four bacterial trains</td>
<td>LGG® MAX helps to reduce gastro-intestinal discomfort</td>
"""

soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
print(''.join(soup('td', text=True)))

输出

LGG® MAX multispecies probiotic consisting of four bacterial trains
LGG® MAX helps to reduce gastro-intestinal discomfort

【讨论】:

  • 我遇到了同样的问题,这个建议为我解决了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多