简体   繁体   English

使用 bs4 和 Python 进行网页抓取

[英]Web Scraping using bs4 with Python

I have a problem with the HTML text I am trying to work with.我尝试处理的 HTML 文本有问题。

I would like to extract the name of the player with all the statistics associated with him.我想提取球员的姓名以及与他相关的所有统计数据。

Basically I am not sure if I can extract the numbers of the column due to the syntax of the code.基本上,由于代码的语法,我不确定是否可以提取列的编号。

In the HTML I included only 2 players, but I would like to add all the players of this club and then continue to the next team.在 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>

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

Easiest way to parse the table is to use pandas :解析表的最简单方法是使用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)

Will grab the table to dataframe and saves it as data.csv :将表格抓取到数据data.csv并将其保存为data.csv

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM