我有一些看起来像这样的HTML:
<textarea><p></textarea>
如果我在Python中做这样的事情:
import bs4
doc = bs4.BeautifulSoup("<textarea><p></textarea>", "html.parser")
print(doc.select("textarea")[0].string)
打印结果<p>
。这绝对是错误的,令人难以置信的误导性,这个元素的实际内容根本不包括<
或>
个字符。
如何在元素中获取实际内容,因为我看看我是否手动curl
页面?我可以关闭此功能吗?
我也试过这个:
>>> for c in doc.select("textarea")[0].children:
... print(c)
...
<p>
答案 0 :(得分:1)
这是default documented behavior of the bs4
package:
如果你给Beautiful Soup一个包含HTML实体的文件 “&amp; lquot;”,它们将被转换为Unicode字符。如果你那么 将文档转换为字符串,Unicode字符将是 编码为UTF-8。你不会得到HTML实体。默认情况下, 输出时唯一被转义的字符是裸露的&符号 和尖括号。这些变为
&
,<
和>
, 这样美丽的汤不会无意中生成无效的HTML或 XML。
您可以按原样恢复实体:
In [1]: import bs4
In [2]: doc = bs4.BeautifulSoup("<textarea><p></textarea>", "html.parser")
In [3]: textarea = doc.select_one("textarea")
In [4]: textarea.unwrap()
Out[4]: <textarea></textarea>
In [5]: print(doc)
<p>