我有以下HTML
<p>
<b>Father:</b> Michael Haughton
<br>
<b>Mother:</b> Diane
<br><b>Brother:</b>
Rashad Haughton<br>
<b>Husband:</b> <a href="/people/540/000024468/">R. Kelly</a> (m. 1994, annulled that same year)
<br><b>Boyfriend:</b> <a href="/people/420/000109093/">Damon Dash</a> (Roc-a-Fella co-CEO)<br></p>
我必须把标题和文本分开,例如,母亲:黛安。。在
所以最后我会有一个字典列表:
^{pr2}$我尝试了以下方法,但没有成功:
def parse(u):
u = u.rstrip('\n')
r = requests.get(u, headers=headers)
if r.status_code == 200:
html = r.text.strip()
soup = BeautifulSoup(html, 'lxml')
headings = soup.select('table p')
for h in headings:
b = h.find('b')
if b is not None:
print(b.text)
print(h.text + '\n')
print('=================================')
url = 'http://www.nndb.com/people/742/000024670/'
输出:
^{pr2}$编辑: 有关页面顶部的其他信息:
输出:
对于正是这个页面,您还可以通过以下方式刮取高中:
您正在查找^{} 标记属性。
这将给您下一个
NavigableString
或下一个Tag
,这取决于它首先找到的内容。在以下是如何使用它:
输出:
^{pr2}$这好像有点不对劲。 部分原因是换行和空格,使用
str.strip
方法可以很容易地消除它们。在尽管如此,
Boyfriend
和Husband
条目缺少值。 这是因为next_sibling
要么是NavigableString
(即astr
)要么是Tag
。 此处<b>
标记和<a>
标记之间的空白被解释为非空文本:如果它不存在,
<b>Boyfriend:</b>
的下一个兄弟将是<a>
标记。 既然它存在,你必须检查:如果下一个同级是一个只包含空格的字符串,那么您要查找的信息是
NavigableString
的下一个同级,它将是一个<a>
标记。在编辑代码:
输出:
现在您可以轻松构建字典:
输出字典:
相关问题 更多 >
编程相关推荐