使用 Beautifulsoup 解析 NELL 知识库页面
Using Beautiful Soup for parsing NELL Knowlege Base page
我正在使用 Beautiful Soup 来解析来自 http://rtw.ml.cmu.edu/rtw/kbbrowser/ 的类别列表,并且我得到了此页面的 html 代码:
<html>
<head>
<link href="../css/browser.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">
if (parent.location.href == self.location.href) {
if (window.location.href.replace)
window.location.replace('index.php');
else
// causes problems with back button, but works
window.location.href = 'index.php';
}
</script>
</head>
<body id="ontology">
...
</body>
</html>
我使用的是非常简单的代码,但是当我尝试访问 <body>
元素时,我得到 None
:
import urllib
from BeautifulSoup import BeautifulSoup
from bs4 import BeautifulSoup
import mechanize
from mechanize import Browser
import requests
import re
import os
link = 'http://rtw.ml.cmu.edu/rtw/kbbrowser/ontology.php'
pageFile = urllib.urlopen(link).read()
soup = BeautifulSoup(pageFile)
print soup.head.contents[0].name
print soup.html.contents[1].name
为什么本例中的头元素没有兄弟?
我得到:
AttributeError: 'NoneType' object has no attribute 'next_element'
当试图获得 head.next_Sibling
时。
这是因为文本节点也是contents
的一部分。
不要使用contents
属性,而是使用CSS selectors
来定位类别列表。例如,以下是列出顶级类别的方法:
for li in soup.select("body#ontology > ul > li"):
print li.find_all("a")[-1].text
我正在使用 Beautiful Soup 来解析来自 http://rtw.ml.cmu.edu/rtw/kbbrowser/ 的类别列表,并且我得到了此页面的 html 代码:
<html>
<head>
<link href="../css/browser.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">
if (parent.location.href == self.location.href) {
if (window.location.href.replace)
window.location.replace('index.php');
else
// causes problems with back button, but works
window.location.href = 'index.php';
}
</script>
</head>
<body id="ontology">
...
</body>
</html>
我使用的是非常简单的代码,但是当我尝试访问 <body>
元素时,我得到 None
:
import urllib
from BeautifulSoup import BeautifulSoup
from bs4 import BeautifulSoup
import mechanize
from mechanize import Browser
import requests
import re
import os
link = 'http://rtw.ml.cmu.edu/rtw/kbbrowser/ontology.php'
pageFile = urllib.urlopen(link).read()
soup = BeautifulSoup(pageFile)
print soup.head.contents[0].name
print soup.html.contents[1].name
为什么本例中的头元素没有兄弟?
我得到:
AttributeError: 'NoneType' object has no attribute 'next_element'
当试图获得 head.next_Sibling
时。
这是因为文本节点也是contents
的一部分。
不要使用contents
属性,而是使用CSS selectors
来定位类别列表。例如,以下是列出顶级类别的方法:
for li in soup.select("body#ontology > ul > li"):
print li.find_all("a")[-1].text