Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Beautifulsoup:提取表中的td列表_Python_Beautifulsoup - Fatal编程技术网

Python Beautifulsoup:提取表中的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"

我陷入了一个美丽的群体问题,我认为这个问题很简单,但我似乎无法解决。它是关于从下表中提取每个td以创建循环和列表:

<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
-  -----------  --------  --  ----------------  -----------------------------------------------  --  --------------