Python с BS4 и urllib - Как перемещать / манипулировать текстом после извлечения из веб-сайта - PullRequest
0 голосов
/ 29 декабря 2018

Хотите написать программу для просмотра статистики выигрыша / проигрыша NBA для любой команды, а затем вернуть цифры (т. Е. (3/6, 50% "))

Лучший способ понять... Запустите код ---- выберите Lakers ---- возвращает статистику на основе следующей игры ---- вернуть проценты для домашней записи после победы в гостях, после поражения в гостях, после победы хозяев, после поражения дома и те же 4 длявыездная игра

Мои мысли об этом - найдите способ перебирать текст и выбирать или извлекать элементы, которые я хочу, а затем запускать несколько простых чисел на основе этих ... или снова перебирать каждую игру иведите подсчет по каждому из процентов, которые я бы хотел вернуть - так что, возможно, установите каждую из этих 4 характеристик, которые я хотел бы, в переменную, подсчитайте или добавьте к ним при переборе списка игр, а затем верните результаты

import bs4 as bs
import urllib.request


sauce = urllib.request.urlopen('http://www.espn.com/nba/team/schedule/_/name/lal').read()
soup = bs.BeautifulSoup(sauce, 'lxml')

table = soup.find('table')
table_rows = table.find_all('tr')

for tr in table_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    print(row)

Этот код вернет большой набор всех данных, которые я хочу

['Fri, Dec 21', 'vs New Orleans ', 'W112-104  ', '19-13', 'Kuzma  23', 'James  12', 'James  14']
['Sun, Dec 23', 'vs Memphis ', 'L107-99  ', '19-14', 'James  22', 'James  14', 'James  7']
['Tue, Dec 25', '@ Golden State ', 'W127-101  ', '20-14', 'Kuzma  19', 'James  13', 'Rondo  10']
['Thu, Dec 27', '@ Sacramento ', 'L117-116  ', '20-15', 'Kuzma  33', 'Chandler  10', 'Ball  12']
['Date', 'Opponent', 'Time', 'TV', 'tickets']
['Fri, Dec 28', 'vs LA ', '10:30 PM ', 'NBATV', '1,143 tickets as low as $175 ']
['Sun, Dec 30', 'vs Sacramento ', '9:30 PM ', '', '1,270 tickets as low as $136 ']
['Wed, Jan 2', 'vs Oklahoma City ', '10:30 PM ', '', '1,240 tickets as low as $175 ']

Я, конечно, хочу завершить мой код, но сейчас я ищу небольшую помощь по возни с данные.Мне очень любопытно, как просто сказать ----- создать новый список со всеми играми «@» и списком со всеми домашними играми в нем с BS4 и url lib, так как я в основномполный новичок в обоих.

Я пробовал несколько вещей, таких как возиться со строкой = [i.text для in in td] и пытался извлечь строку, текст, но просто не могу найти нужную вещьНекоторые из них имеют неправильный синтаксис, и я думаю, что некоторые просто не имеют правильный код.Любая помощь приветствуется!

Оттуда я могу работать над выяснением другого кода, который был бы необходим для выполнения фактических вычислений, как указано в начале, и, при необходимости, любой другой помощи, которую я могу опубликовать или задать другой вопрос!

1 Ответ

0 голосов
/ 29 декабря 2018

это поможет вам.

import pandas as pd

url = "http://www.espn.com/nba/team/schedule/_/name/lal"

# get all tables in url
dfs = pd.read_html(url)

# there were 3 tables. We want table in index position 2
df = dfs[2]

# take the first row (index 0) and make that the column names. Drop that first row and re index the dataframe
df = df.rename(columns=df.iloc[0]).drop(df.index[0]).reset_index(drop = True)

Вывод:

print (df)
           Date         Opponent       ...          Hi Rebounds       Hi Assists
0   Thu, Oct 18       @ Portland       ...             James 12         Rondo 11
1   Sat, Oct 20       vs Houston       ...              Rondo 7         Rondo 10
2   Mon, Oct 22   vs San Antonio       ...              Hart 10         James 14
3   Wed, Oct 24        @ Phoenix       ...         Stephenson 8         James 10
4   Thu, Oct 25        vs Denver       ...             James 11         James 11
5   Sat, Oct 27    @ San Antonio       ...             James 11          Rondo 5
6   Mon, Oct 29      @ Minnesota       ...             James 10          James 8
7   Wed, Oct 31        vs Dallas       ...             McGee 15           Ball 7
8    Sat, Nov 3       @ Portland       ...             Rondo 10          James 7
9    Sun, Nov 4       vs Toronto       ...               Ball 9          James 6
10   Wed, Nov 7     vs Minnesota       ...             James 11         Rondo 10
11  Sat, Nov 10     @ Sacramento       ...          Chandler 12          Rondo 7

Как только у вас будет этот кадр данных, начните фильтровать строки или разбивать строки с помощью "@".Сделайте несколько групп, чтобы группировать игры / домашние игры.Вы также можете начать разбирать столбец даты.Множество вещей, которые вы можете поиграть с данными с пандами.

...