我正在抓取一个包含在浏览器中看起来像这样的 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&reg; 在第二个实例中,® 在源代码中写为 ®

我正在使用 Python 2.7、机械化和 BeautifulSoup。

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

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

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

我正在使用 Windows 7。其他详细信息:
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'cp850'
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
>>>

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

更新:我在这里取得了一些进展。
基本算法是
  • 阅读 mechanize 中的网页
  • 用 BeautifulSoup 来做什么……我写下来的时候我不知道
    这个预处理阶段到底是做什么的。
  • 使用 BeautifulSoup 从一个表中提取信息
    除了特殊字符的处理之外,有序。
  • 将信息写入以 | 分隔的文件中占
    长单元格条目中的标点符号并允许导入
    Excel 等

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

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

    最佳答案

    从标题回答问题:

    # -*- 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
    

    关于Python, BeautifulSoup : &reg - how to convert to proper regmark,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8751147/

    10-16 13:31