【发布时间】:2015-08-28 11:47:11
【问题描述】:
在 iPython 上使用 BeautifulSoup,我正在尝试抓取网页并在 javascript 脚本中获取一些 html 元素,但我遇到了一些编码问题。
页面是法语的,所以口音很重,有的直接写在源代码里,有的用自己的html代码写的。
示例:
html_doc = """<html>
<body>
<p>voilà</p>
<p>déjà vu</p>
<p>c'est la vie !</p>
<script type="text/javascript">
...
varHTML = '<p>voilà</p>
<p>déjà vu</p>
<p>c\'est la vie !</p>';
...
</script>
</body>
</html>"""
from bs4 import BeautifulSoup
BeautifulSoup(html_doc)
我得到这个结果:
<html>
<body>
<p>voilà</p>
<p>déjà vu</p>
<p>c'est la vie !</p>
<script type="text/javascript">
...
varHTML = '<p>voilà</p>
<p>déjà vu</p>
<p>c'est la vie !</p>';
...
</script>
</body>
</html>
如您所见,在第一部分中,在 javascript 之外,所有的重音都可以。但是对于 javascript 中的 html,BeautifulSoup 不会将 &eacute; 和 &agrave; 转换为 "é" 和 "à"。
我该如何解决?
奖励问题:
在此示例中,BeautifulSoup 正确地将 C\'est 转换为 C'est,但使用与我在线阅读的 html 页面相同的撇号,当撇号在javascript部分,所以我得到:
<html>
<body>
<p>voilà</p>
<p>déjà vu</p>
<p>c'est la vie !</p>
<script type="text/javascript">
...
varHTML = '<p>voilà</p>
<p>déjà vu</p>
<p>c\'est la vie !</p>';
...
</script>
</body>
</html>
你能理解为什么吗?
最后,我希望将 javascript 中的所有 html 部分作为 javascript 之外的部分。
非常感谢您的帮助! 格雷戈里
【问题讨论】:
-
嗨@jumojer 感谢您的回复。我不认为这是同一个问题。我尝试使用 BeautifulSoup 忽略 utf-8 但我仍然遇到同样的问题。在 javascript 部分之外,BeautifulSoup 正在以正确的编码读取所有文本。问题在于在 javascript 代码中读取包含 html 元素的变量。
标签: python python-2.7 unicode beautifulsoup