Как лучше всего очистить название команды баскетболиста? - PullRequest
0 голосов
/ 20 октября 2018

Я могу успешно очистить несколько столбцов, однако мне не удалось получить название команды соответствующего игрока.Вот мой код:

from urllib.request import urlopen
from lxml.html import fromstring

import pandas as pd


url = "https://www.basketball-reference.com/leagues/NBA_2018_advanced.html"

content = str(urlopen(url).read())
comment = content.replace("-->","").replace("<!--","")
tree = fromstring(comment)


for idx, bball_row in enumerate(tree.xpath('//table[contains(@class,"stats_table")]//tr[contains(@class,"full_table")]')):
    names = bball_row.xpath('.//td[@data-stat="player"]/a')[0].text
    mp = bball_row.xpath('.//td[@data-stat="mp"]/text()')[0]
    per = bball_row.xpath('.//td[@data-stat="per"]/text()')[0]
    ws = bball_row.xpath('.//td[@data-stat="ws"]/text()')[0]
    bpm = bball_row.xpath('.//td[@data-stat="bpm"]/text()')[0]
    vorp = bball_row.xpath('.//td[@data-stat="vorp"]/text()')[0]
    print(names, per, ws, bpm, vorp)

Все работает до этого момента.Я хотел бы добавить категорию названия команды, хотя.Я ищу сокращенное название команды (например, OKC для Оклахома-Сити).

В следующем коде возникла ошибка:

team = bball_row.xpath('.//td[@data-stat="team_id"]/a')[0].text
    print(team)

Код начинает печатать все названия командзатем сталкивается с ошибкой.

Вот ошибка:

team = bball_row.xpath('.//td[@data-stat="team_id"]/a')[0].text
IndexError: list index out of range

Просто чтобы повторить то, что я ищу ... Я пытаюсь добавить сокращенное название команды рядом ссоответствующий игрок.

Любые предложения будут с благодарностью.Я хочу заранее поблагодарить сообщество за ваше время и усилия!

1 Ответ

0 голосов
/ 20 октября 2018

Ваш скрипт выдавал эту ошибку только тогда, когда он не нашел нужного значения.Что вы можете сделать, это поймать ошибку и правильно ее обработать.Попробуйте следующий скрипт:

import requests
from lxml.html import fromstring

url = "https://www.basketball-reference.com/leagues/NBA_2018_advanced.html"

content = requests.get(url).text
comment = content.replace("-->","").replace("<!--","")
tree = fromstring(comment)

for row in tree.xpath('//table[contains(@class,"stats_table")]//tr[contains(@class,"full_table")]'):
    names = row.xpath('.//td[@data-stat="player"]/a')[0].text
    mp = row.xpath('.//td[@data-stat="mp"]/text()')[0]
    per = row.xpath('.//td[@data-stat="per"]/text()')[0]
    ws = row.xpath('.//td[@data-stat="ws"]/text()')[0]
    bpm = row.xpath('.//td[@data-stat="bpm"]/text()')[0]
    vorp = row.xpath('.//td[@data-stat="vorp"]/text()')[0]
    try:
        team = row.xpath('.//td[@data-stat="team_id"]/a')[0].text
    except IndexError: team = "N/A"
    print(names, per, ws, bpm, vorp, team)

Вывод, который вы можете получить как:

Alex Abrines 9.0 2.2 -2.2 -0.1 OKC
Quincy Acy 8.2 1.0 -2.2 -0.1 BRK
Steven Adams 20.6 9.7 3.3 3.3 OKC
Bam Adebayo 15.7 4.2 0.2 0.8 MIA
...