beauthulsoup无法在javascript中读取正确编码的html

2024-06-25 22:52:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在iPython上使用BeautifulSoup,我试图在javascript脚本中获取一些html元素,但是我在编码方面有一些问题。在

这个页面是法语的,所以有很多重音,有些是直接用源代码编写的,有些是用html代码编写的。在

示例: 在

html_doc = """<html>
<body>
<p>voilà</p>
<p>d&eacute;j&agrave; vu</p>
<p>c'est la vie !</p>

<script type="text/javascript">
...
varHTML = '<p>voilà</p>
<p>d&eacute;j&agrave; vu</p>
<p>c\'est la vie !</p>';
...
</script>
</body>
</html>"""

from bs4 import BeautifulSoup
BeautifulSoup(html_doc)

我得到的结果是:

^{pr2}$

如您所见,在第一部分中,除了javascript之外,所有的重音都是可以的。但是对于javascript中的html,beauthoulsoup并没有将&eacute;和{}转换为“é”和“á”。在

我怎么解决这个问题?在

额外问题:

在这个例子中,beauthoulsoup正确地转换了C\'est中的C\'est,但是在我在线阅读的html页面中,beauthulsoup在结果中保留了“\”,当撇号在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&eacute;j&agrave; vu</p>
<p>c\'est la vie !</p>';
...
</script>
</body>
</html>

你能理解为什么吗?在

最后,我希望javascript中的所有html部分都作为javascript之外的部分。在

非常感谢你的帮助! 格里戈里


Tags: dochtmlscriptbody页面javascriptlaest
1条回答
网友
1楼 · 发布于 2024-06-25 22:52:10

我终于解决了。在

使用Regex,我将html部分作为文本提取到javascript中,然后对其重新应用beauthoulsoup以获得可读的html代码:

from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(html_doc)
html_from_javascript = re.findall("varHTML = '(.*)';",soup.text)
print str(BeautifulSoup(html_from_javascript[0]))

给出:<p>voilà</p><p>déjà vu</p><p>c'est la vie !</p>

关于奖金问题:

问题是网页上的初始代码被双重转义。 所以代码不是C\'est,而是C\\\'est。在

我用这个函数解决了这个问题:

^{pr2}$

希望有一天能有人看到它,它不是复制品!在

格里戈里

相关问题 更多 >