以下是html页面的示例。尝试创建一个数据集,其中标记<b>
下的值将是标题,标记<span>
的值将是它们的值。怎么做。请帮忙。
<div class ="profile">
<P class="info">
<b>Full name</b>
<span>Raju Kumar</span>
</p>
<P class="info">
<b>DOB</b>
<span>05/06/1992</span>
</p>
<P class="info">
<b>DOB</b>
<span>05/06/1992</span>
</p>
</div>
以下是我尝试将<b>
标记值作为标题。但它只返回第一个<b>
标记值。
header = [h.string for h in soup.find('p', class_='info').find_all('b')]
答案 0 :(得分:1)
您可以使用以下行获取列表:
values = [(p.find('b').string, p.find('span').string)
for p in soup.find_all('p', class_='info')]
如果您更喜欢字典格式:
dict_values = {p.find('b').string: p.find('span').string
for p in soup.find_all('p', class_='info') }
修改强>
如果您需要构建数据框,
你有方法DataFrame.from_items,给定一系列对:
values = [(p.find('b').string, p.find('span').string)
for p in soup.find_all('p', class_='info')]
value_df = pandas.DataFrame.from_items(values)
或者您可以使用DataFrame.from_dict:
dict_values = {p.find('b').get_txt():p.find('span').get_txt()
for p in soup.find_all('p', class_='info') }
value_df = pandas.DataFrame.from_dict(dict_values)
答案 1 :(得分:1)
如果我理解正确,你需要循环两次:
header = [b.string for h in soup.find_all('p', class_='info') for b in h.find_all('b')]
答案 2 :(得分:0)
您只使用p
找到第一个soup.find
- 使用soup.find_all
,就像使用b
标记