使用BeautifulSoup获取文档DOCTYPE

时间:2010-03-23 11:16:38

标签: python parsing beautifulsoup scrapy

我刚刚开始使用scrapyBeautifulSoup一起修补,我想知道我是否遗漏了一些非常明显的东西,但我似乎无法弄清楚如何获取doctype从生成的汤对象返回的html文档。

给出以下html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en"> 
<head> 
<meta charset=utf-8 />
<meta name="viewport" content="width=620" />
<title>HTML5 Demos and Examples</title> 
<link rel="stylesheet" href="/css/html5demos.css" type="text/css" /> 
<script src="js/h5utils.js"></script> 
</head> 
<body>
<p id="firstpara" align="center">This is paragraph <b>one</b>
<p id="secondpara" align="blah">This is paragraph <b>two</b>.
</html>

有人能告诉我是否有使用BeautifulSoup从中提取声明的doctype的方法?

3 个答案:

答案 0 :(得分:4)

Beautiful Soup 4有一个DOCTYPE声明类,所以你可以使用它来提取顶层的所有声明(虽然你无疑期待一个或者没有!)

def doctype(soup):
    items = [item for item in soup.contents if isinstance(item, bs4.Doctype)]
    return items[0] if items else None

答案 1 :(得分:3)

您可以浏览顶级元素并检查每个元素以查看它是否是声明。然后你可以检查它以找出它是什么类型的声明:

for child in soup.contents:
    if isinstance(child, BS.Declaration):
        declaration_type = child.string.split()[0]
        if declaration_type.upper() == 'DOCTYPE':
            declaration = child

答案 2 :(得分:0)

您可以直接获取汤内容中的第一项:

>>> soup.contents[0]
u'DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"'