beautifulsouphtml.parser和xml中的<link>标记(与带有'lxml'解析器的CDATA相比)。我必须两者都用吗?

2024-06-06 05:03:55 发布

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

我正在尝试使用BeautifulSoup html.parser进行解析,但该标记有问题,因为它的处理方式与其他标记不同:

<title>标记上,它按预期工作:

>>> BeautifulSoup("<title>Somalia’s Electoral Crisis in Extremis</title>", features='html.parser')
<title>Somalia’s Electoral Crisis in Extremis</title>

但是,在处理<link>标记时,它会在开始标记中引入斜杠,并删除结束标记:

>>>BeautifulSoup("<link>https://warontherocks.com/2021/04/somalias-electoral-crisis-in-extremis/</link>", features='html.parser')
<link/>https://warontherocks.com/2021/04/somalias-electoral-crisis-in-extremis/

为什么要这样做

现在,如果我使用'lxml''xml'标记,它可以正常工作

>>> BeautifulSoup("<link>https://warontherocks.com/2021/04/somalias-electoral-crisis-in-extremis/</link>", features='lxml')
<html><head><link/></head><body><p>https://warontherocks.com/2021/04/somalias-electoral-crisis-in-extremis/</p></body></html>

我之所以使用html.parser,是因为我还遇到了嵌套元素(如<something:tag>)和CDATA字符串。因此,如果可能的话,用lxml解析CDATA(这对我来说不起作用)也是一个解决方案

我是否需要编写一些逻辑来决定使用哪个库来解析每个站点,或者是否有一种方法可以按原样使用BeautifulSoup来实现这一点


Tags: inhttps标记comparsertitlehtmllink