如何从下表中提取特定数据,例如衰减时间91.1 ms 5?
<table bgcolor=navy cellpadding=4 cellspacing=1 border=0 align=center>
<tr class=hp >
<td nowrap>E(level) (MeV)</td>
<td nowrap>Jπ</td><td nowrap>Δ(MeV)</td>
<td nowrap>T<sub>1/2</sub></td>
<td nowrap>Decay Modes</td>
</tr>
<tr class=cp>
<td nowrap valign=top>0.0</td>
<td nowrap valign=top>4+</td>
<td nowrap valign=top> 18.2010</td>
<td nowrap valign=top>91.1 ms <i>5</i> </td>
<td nowrap valign=top> ε : 100.00 %<br> εp : 55.00 %<br> ε2p : 1.10 %<br> εα : 0.04 %<br> </td>
</tr>
</table>
答案 0 :(得分:0)
您可以使用get_element_by_tag_name
获取表,并遍历每个内部标签并获取必要的数据。
答案 1 :(得分:0)
假设您已经在字符串中添加了标记。您必须按类(.cp)查找元素,然后必须按标记(td)查找元素,并且可以使用.text
属性获取每个找到的元素的值,因此请使用以下代码:>
import re
from bs4 import BeautifulSoup
html_doc = """<table bgcolor=navy cellpadding=4 cellspacing=1 border=0 align=center>
<tr class=hp >
<td nowrap>E(level) (MeV)</td>
<td nowrap>Jπ</td><td nowrap>Δ(MeV)</td>
<td nowrap>T<sub>1/2</sub></td>
<td nowrap>Decay Modes</td>
</tr>
<tr class=cp>
<td nowrap valign=top>0.0</td>
<td nowrap valign=top>4+</td>
<td nowrap valign=top> 18.2010</td>
<td nowrap valign=top>91.1 ms <i>5</i> </td>
<td nowrap valign=top> ε : 100.00 %<br> εp : 55.00 %<br> ε2p : 1.10 %<br> εα : 0.04 %<br> </td>
</tr>
</table>"""
soup = BeautifulSoup(html_doc, 'html.parser')
elements = soup.find_all(class_=re.compile("cp"))
for e in elements[0].find_all('td'):
# the e.text contains the value of each td elements in your table
print(e.text)
答案 2 :(得分:0)
下面是一个简单的代码,可以将该表放入pandas数据框中:
from bs4 import BeautifulSoup
import pandas as pd
page = """<table cellpadding=4 cellspacing=1 border=0 align=center>
<tr class=hp >
<td nowrap>E(level) (MeV)</td>
<td nowrap>Jπ</td>
<td nowrap>Δ(MeV)</td>
<td nowrap>T<sub>1/2</sub></td>
<td nowrap>Decay Modes</td>
</tr>
<tr class=cp>
<td nowrap valign=top>0.0</td>
<td nowrap valign=top>4+</td>
<td nowrap valign=top> 18.2010</td>
<td nowrap valign=top>91.1 ms <i>5</i> </td>
<td nowrap valign=top> ε : 100.00 %<br> εp : 55.00 %<br> ε2p : 1.10 %<br> εα : 0.04 %<br> </td>
</tr>
</table>"""
soup = BeautifulSoup(page, "html.parser")
headers = soup.find('tr', {'class':'hp'}).findAll('td')
columns = []
for header in headers:
columns.append(header.text)
data = []
data_raw = soup.findAll('tr',{'class':'cp'})
for row in data_raw:
items = []
for element in row.findAll('td'):
items.append(element.text)
data.append(items)
df = pd.DataFrame(data, columns=columns)
print(df['T1/2'])
输出为:
0 91.1 ms 5
Name: T1/2, dtype: object
如果衰减模式中的内容为多行,则可能必须添加其他代码来检测(由<br>
分隔),或者如果可以,请更正HTML在不同的行标签中包含不同的行,而在标题标签中包含标题
答案 3 :(得分:0)
通常,如果我看到<table>
标记,则尝试使用熊猫.read_html()
。它将重新调谐数据帧列表。然后,只需选择一个数据框并对其进行操作即可以所需的方式获取数据,或提取所需的数据即可。
import pandas as pd
html = '''<table bgcolor=navy cellpadding=4 cellspacing=1 border=0 align=center>
<tr class=hp >
<td nowrap>E(level) (MeV)</td>
<td nowrap>Jπ</td><td nowrap>Δ(MeV)</td>
<td nowrap>T<sub>1/2</sub></td>
<td nowrap>Decay Modes</td>
</tr>
<tr class=cp>
<td nowrap valign=top>0.0</td>
<td nowrap valign=top>4+</td>
<td nowrap valign=top> 18.2010</td>
<td nowrap valign=top>91.1 ms <i>5</i> </td>
<td nowrap valign=top> ε : 100.00 %<br> εp : 55.00 %<br> ε2p : 1.10 %<br> εα : 0.04 %<br> </td>
</tr>
</table>'''
tables = pd.read_html(html)
df = tables[0]
df.columns = df.iloc[0,:]
df = df.iloc[1:,:]
输出:
print(df.loc[1,'T1/2'])
91.1 ms 5