Python Beautifulsoup:提取表中的td列表
我陷入了一个美丽的群体问题,我认为这个问题很简单,但我似乎无法解决。它是关于从下表中提取每个td以创建循环和列表:Python Beautifulsoup:提取表中的td列表,python,beautifulsoup,Python,Beautifulsoup,我陷入了一个美丽的群体问题,我认为这个问题很简单,但我似乎无法解决。它是关于从下表中提取每个td以创建循环和列表: <table class="tabla-clasificacion-home marratua tablageneral tabla-actas"> <thead> <tr> <th scope="col">Team</th> <th scope="col"
<table class="tabla-clasificacion-home marratua tablageneral tabla-actas">
<thead>
<tr>
<th scope="col">Team</th>
<th scope="col">Name</th>
<th scope="col">Number</th>
<th scope="col">Tipo</th>
<th scope="col">Motivo</th>
<th scope="col">Minute</th>
<th scope="col">Bloque</th>
</tr>
</thead>
<tbody>
<tr>
<td>Barcelona</td>
<td>Player 1</td>
<td>16</td>
<td>Tarjeta Amarilla</td>
<td>Derribar a un contrario en la disputa del balón</td>
<td>88</td>
<td>Segundo tiempo</td>
</tr> <tr>
<td>Real Madrid</td>
<td>Player 2</td>
<td>8</td>
<td>Tarjeta Amarilla</td>
<td>Sujetar a un adversario impidiendo su avance.</td>
<td>12</td>
<td>Primer tiempo</td>
</tr>
</tbody>
</table>
这是我得到的输出(我也想删除代码,但如果我尝试.text或.get_text(),则会出现错误“NoneType”对象没有属性“text”):
{'Team':皇家马德里,'Name':皇家马德里}
我感觉我离解决方案很近了,但我被卡住了,无法前进。提前感谢您的帮助 您必须首先检索所有行,然后对每行调用
row.findAll('td')
,并将其存储在变量中。之后,您可以使用索引检索所需的列,并将其作为字典附加到列表中:
table = soup.find('table', class_='tabla-clasificacion-home marratua tablageneral tabla-actas')
tbody = table.find('tbody')
tr = tbody.findAll('tr')
lista = []
for row in tr:
td = row.findAll('td')
lista.append({ 'Team': td[0].text, "Name": td[1].text, "Number": td[2].text, "Minute": td[5].text })
如果你想学习新东西,你甚至不需要bs4(嗯,有点)。您只需
pandas
(从框中取出一个数据帧)即可获得:
- ----------- -------- -- ---------------- ----------------------------------------------- -- --------------
0 Barcelona Player 1 16 Tarjeta Amarilla Derribar a un contrario en la disputa del balón 88 Segundo tiempo
1 Real Madrid Player 2 8 Tarjeta Amarilla Sujetar a un adversario impidiendo su avance. 12 Primer tiempo
- ----------- -------- -- ---------------- ----------------------------------------------- -- --------------
为此:
将熊猫作为pd导入
从表格导入表格
示例_html=“”
团队
名称
数
蒂波
莫蒂沃
分钟
斑点
巴塞罗那
玩家1
16
阿马里拉塔酒店
在巴林争议中描述一个联合国合同
88
Segundo tiempo
皇家马德里
玩家2
8.
阿马里拉塔酒店
苏杰塔是一个前卫的对手。
12
蒂恩波底漆
"""
df=pd.read\u html(示例html,flavor=“bs4”)
df=局部固结(df)
打印(制表(df))
df.to_csv(“your_table.csv”,index=False)
代码还会将表转储到.csv
文件:
谢谢你,阿马尔,但不幸的是,它不起作用,因为它同时需要团队和名字。我认为问题更多的是在td中使用find或findNext。我会考虑你关于这本词典的建议,但首先我得用英语解决问题tds@nokvk我已经更新了我的答案,以解决您的问题。请看一看,它现在很好用。谢谢!!!
table = soup.find('table', class_='tabla-clasificacion-home marratua tablageneral tabla-actas')
tbody = table.find('tbody')
tr = tbody.findAll('tr')
lista = []
for row in tr:
td = row.findAll('td')
lista.append({ 'Team': td[0].text, "Name": td[1].text, "Number": td[2].text, "Minute": td[5].text })
- ----------- -------- -- ---------------- ----------------------------------------------- -- --------------
0 Barcelona Player 1 16 Tarjeta Amarilla Derribar a un contrario en la disputa del balón 88 Segundo tiempo
1 Real Madrid Player 2 8 Tarjeta Amarilla Sujetar a un adversario impidiendo su avance. 12 Primer tiempo
- ----------- -------- -- ---------------- ----------------------------------------------- -- --------------