即使子项存在,也获取 table 数据的文本 - LXML
Get text of table data even if child exists - LXML
尝试从 HTML 中的 table 行中提取文本,其中每个 table 数据标签可能有也可能没有嵌套标签。一直在 python 中使用 lxml 库来实现数据提取,但我不太清楚如何最好地处理这个问题:
from lxml import etree, html
s = """<table>
<tr><th>Event</th><th>Start Date</th><th>End Date</th></tr>
<tr><td>a</td><td>b</td><td>c</td></tr>
<tr><td><code>d</code></td><td>e</td><td>f</td></tr>
<tr><td>g</td><td>h</td><td>i</td></tr>
</table>
"""
table = etree.HTML(s).findall("body/table/tr/td")
rows = iter(table)
headers = ['row 1', 'row 2', 'row 3']
for row in rows:
values = [col.text for col in row]
print dict(zip(headers, values))
这是我到目前为止的代码,是从另一个示例中提取的。
我会使用 BeautifulSoup 库中的 lxml
解析器执行以下操作:
from bs4 import BeautifulSoup
import pandas as pd
s = """<table>
<tr><th>Event</th><th>Start Date</th><th>End Date</th></tr>
<tr><td>a</td><td>b</td><td>c</td></tr>
<tr><td><code>d</code></td><td>e</td><td>f</td></tr>
<tr><td>g</td><td>h</td><td>i</td></tr>
</table>
"""
soup = BeautifulSoup(s, 'lxml')
headers = [h.text for h in soup.find_all('th')]
rows = soup.find_all('tr')[1:]
dic_list = []
for row in rows:
data = [i.text for i in row]
dic = {k:v for k,v in zip(headers, data)}
dic_list.append(dic)
df = pd.DataFrame(dic_list)
print(df)
这导致:
End Date Event Start Date
0 c a b
1 f d e
2 i g h
尝试从 HTML 中的 table 行中提取文本,其中每个 table 数据标签可能有也可能没有嵌套标签。一直在 python 中使用 lxml 库来实现数据提取,但我不太清楚如何最好地处理这个问题:
from lxml import etree, html
s = """<table>
<tr><th>Event</th><th>Start Date</th><th>End Date</th></tr>
<tr><td>a</td><td>b</td><td>c</td></tr>
<tr><td><code>d</code></td><td>e</td><td>f</td></tr>
<tr><td>g</td><td>h</td><td>i</td></tr>
</table>
"""
table = etree.HTML(s).findall("body/table/tr/td")
rows = iter(table)
headers = ['row 1', 'row 2', 'row 3']
for row in rows:
values = [col.text for col in row]
print dict(zip(headers, values))
这是我到目前为止的代码,是从另一个示例中提取的。
我会使用 BeautifulSoup 库中的 lxml
解析器执行以下操作:
from bs4 import BeautifulSoup
import pandas as pd
s = """<table>
<tr><th>Event</th><th>Start Date</th><th>End Date</th></tr>
<tr><td>a</td><td>b</td><td>c</td></tr>
<tr><td><code>d</code></td><td>e</td><td>f</td></tr>
<tr><td>g</td><td>h</td><td>i</td></tr>
</table>
"""
soup = BeautifulSoup(s, 'lxml')
headers = [h.text for h in soup.find_all('th')]
rows = soup.find_all('tr')[1:]
dic_list = []
for row in rows:
data = [i.text for i in row]
dic = {k:v for k,v in zip(headers, data)}
dic_list.append(dic)
df = pd.DataFrame(dic_list)
print(df)
这导致:
End Date Event Start Date
0 c a b
1 f d e
2 i g h