使用bs4和Python进行Web抓取

2024-06-11 06:58:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图处理的HTML文本有问题

我想提取球员的名字和所有与他相关的统计数据

基本上,由于代码的语法,我不确定是否可以提取列的编号

在HTML中,我只包含了2名球员,但我想添加该俱乐部的所有球员,然后继续加入下一支球队

<table data-toggle="table-estadisticas-clubes" data-fixed-columns="true" data-fixed-number="2" class="roboto">
    <thead>
        <tr class="cabecera_general">
            <th>&nbsp;</th>
            <th>&nbsp;</th>
            <th>PAR</th>
            <th>MIN</th>
            <th>&nbsp;</th>
            <th>PT</th>
            <th colspan="3">TIROS DE 3</th>
            <th colspan="3">TIROS DE 2</th>
            <th colspan="3">TIROS LIBRES</th>
            <th colspan="3">REBOTES</th>
            <th>ASI</th>
            <th colspan="2">BALONES</th>
            <th colspan="2">TAPONES</th>
            <th>&nbsp;</th>
            <th colspan="2">FALTAS</th>
            <th>&nbsp;</th>
            <th class="ultimo">VAL</th>
        </tr>
        <tr>
            <th class="situacion">&nbsp;</th>
            <th class="nombre jugador">&nbsp;</th>
            <th>Jug</th>
            <th>Jug</th>
            <th>5i</th>
            <th>&nbsp;</th>
            <th>Con</th>
            <th>Int</th>
            <th>%</th>
            <th>Con</th>
            <th>Int</th>
            <th>%</th>
            <th>Con</th>
            <th>Int</th>
            <th>%</th>
            <th>Def</th>
            <th>Ofe</th>
            <th>Tot</th>
            <th>Efe</th>
            <th>Rec</th>
            <th>Per</th>
            <th>Fav</th>
            <th>Con</th>
            <th>Mat</th>
            <th>Com</th>
            <th>Rec</th>
            <th>+/-</th>
            <th class="ultimo">&nbsp;</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="situacion"></td>
            <td class="nombre jugador ellipsis"><a href="/jugador/ver/30000024-William-Magarity"><span class="nombre_corto">William Magarity</span></a></td>
            <td class="borde_derecho">2</td>
            <td class="borde_derecho">23:57</td>
            <td class="borde_derecho"></td>
            <td class="borde_derecho">11,5</td>
            <td class="borde_derecho">3,0</td>
            <td class="borde_derecho">4,0</td>
            <td class="borde_derecho">75,0%</td>
            <td class="borde_derecho">0,5</td>
            <td class="borde_derecho">2,5</td>
            <td class="borde_derecho">20,0%</td>
            <td class="borde_derecho">1,5</td>
            <td class="borde_derecho">1,5</td>
            <td class="borde_derecho">100,0%</td>
            <td class="borde_derecho">3,5</td>
            <td class="borde_derecho">0,0</td>
            <td class="borde_derecho">3,5</td>
            <td class="borde_derecho">1,5</td>
            <td class="borde_derecho">1,5</td>
            <td class="borde_derecho">1,0</td>
            <td class="borde_derecho">0,5</td>
            <td class="borde_derecho">0,0</td>
            <td class="borde_derecho">0,5</td>
            <td class="borde_derecho">0,5</td>
            <td class="borde_derecho">2,0</td>
            <td class="borde_derecho">1,0</td>
            <td class="borde_derecho">16,0</td>
        </tr>
        <tr class="par">
            <td class="situacion"></td>
            <td class="nombre jugador ellipsis"><a href="/jugador/ver/30000283-Jaime-Echenique"><span class="nombre_corto">Jaime Echenique</span></a></td>
            <td class="borde_derecho">2</td>
            <td class="borde_derecho">23:34</td>
            <td class="borde_derecho"></td>
            <td class="borde_derecho">14,0</td>
            <td class="borde_derecho">0,5</td>
            <td class="borde_derecho">1,0</td>
            <td class="borde_derecho">50,0%</td>
            <td class="borde_derecho">3,5</td>
            <td class="borde_derecho">7,0</td>
            <td class="borde_derecho">50,0%</td>
            <td class="borde_derecho">5,5</td>
            <td class="borde_derecho">6,0</td>
            <td class="borde_derecho">91,7%</td>
            <td class="borde_derecho">0,0</td>
            <td class="borde_derecho">3,5</td>
            <td class="borde_derecho">3,5</td>
            <td class="borde_derecho">1,0</td>
            <td class="borde_derecho">0,5</td>
            <td class="borde_derecho">2,0</td>
            <td class="borde_derecho">2,0</td>
            <td class="borde_derecho">0,0</td>
            <td class="borde_derecho">0,5</td>
            <td class="borde_derecho">3,0</td>
            <td class="borde_derecho">4,0</td>
            <td class="borde_derecho">-1,5</td>
            <td class="borde_derecho">15,5</td>
        </tr>
    </tbody>
</table>

网址:https://www.acb.com/club/estadisticas/id/14


Tags: datatablecontrclasstdspan球员
1条回答
网友
1楼 · 发布于 2024-06-11 06:58:17

解析表的最简单方法是使用pandas

import pandas as pd


url = 'https://www.acb.com/club/estadisticas/id/14'
df = pd.read_html(url)[0].iloc[:,1:]
df.to_csv('data.csv', index=False)

将表抓取到dataframe并将其保存为data.csv

enter image description here

相关问题 更多 >