Python 使用 BS4 和 urllib - 如何 move/manipulate 从网站中提取文本
Python with BS4 and urllib - How to move/manipulate text once extracted from a website
希望编写一个程序来查找任何给定球队的 NBA Win/Loss 统计数据 - 然后 return 数字(即(3/6,50%))
更好地理解...
运行 代码 ---- select 湖人队 ---- return 下一场比赛的统计数据 ---- return 客场获胜后主场战绩的百分比,客场失利后,主场获胜后,主场失利后
和客场比赛相同的 4
我对此的看法 -
找到一种方法来遍历文本和 select 或提取我想要的元素,然后 运行 一些基于这些的简单数字......或者再次遍历每个游戏并对每个游戏进行统计我想要的百分比 returned -- 所以也许将我想要的这 4 个统计数据中的每一个都设置为一个变量,计数或在遍历游戏列表时添加到它们然后 return 结果
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)
这段代码会return一大堆我想要的所有数据
['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 5 ']
['Sun, Dec 30', 'vs Sacramento ', '9:30 PM ', '', '1,270 tickets as low as 6 ']
['Wed, Jan 2', 'vs Oklahoma City ', '10:30 PM ', '', '1,240 tickets as low as 5 ']
我当然希望完成我的代码,但现在我正在寻找一些关于处理数据的帮助。我最好奇的是如何说 ----- 创建一个包含所有“@”客场比赛的新列表和一个包含所有主场比赛的列表,其中包含 BS4 和 url lib 作为我
我基本上是两者的初学者。
我尝试了一些方法,比如弄乱 row = [i.text for in in td] 并尝试提取字符串、文本,但就是找不到正确的东西,其中一些是不正确的语法,我认为有些只是没有正确的代码。感谢您的帮助!
从那里我可以找出执行开始时所述的实际计算所需的其他代码,如果需要任何其他帮助,我可以重新发布或提出其他问题!
这会让你继续前进。
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
获得该数据框后,开始过滤行,或使用“@”拆分行。做一些 groupby 来分组 games/home 场比赛。您也可以开始解析日期列。您可以使用 pandas.
处理很多数据
希望编写一个程序来查找任何给定球队的 NBA Win/Loss 统计数据 - 然后 return 数字(即(3/6,50%))
更好地理解... 运行 代码 ---- select 湖人队 ---- return 下一场比赛的统计数据 ---- return 客场获胜后主场战绩的百分比,客场失利后,主场获胜后,主场失利后 和客场比赛相同的 4
我对此的看法 - 找到一种方法来遍历文本和 select 或提取我想要的元素,然后 运行 一些基于这些的简单数字......或者再次遍历每个游戏并对每个游戏进行统计我想要的百分比 returned -- 所以也许将我想要的这 4 个统计数据中的每一个都设置为一个变量,计数或在遍历游戏列表时添加到它们然后 return 结果
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)
这段代码会return一大堆我想要的所有数据
['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 5 ']
['Sun, Dec 30', 'vs Sacramento ', '9:30 PM ', '', '1,270 tickets as low as 6 ']
['Wed, Jan 2', 'vs Oklahoma City ', '10:30 PM ', '', '1,240 tickets as low as 5 ']
我当然希望完成我的代码,但现在我正在寻找一些关于处理数据的帮助。我最好奇的是如何说 ----- 创建一个包含所有“@”客场比赛的新列表和一个包含所有主场比赛的列表,其中包含 BS4 和 url lib 作为我 我基本上是两者的初学者。
我尝试了一些方法,比如弄乱 row = [i.text for in in td] 并尝试提取字符串、文本,但就是找不到正确的东西,其中一些是不正确的语法,我认为有些只是没有正确的代码。感谢您的帮助!
从那里我可以找出执行开始时所述的实际计算所需的其他代码,如果需要任何其他帮助,我可以重新发布或提出其他问题!
这会让你继续前进。
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
获得该数据框后,开始过滤行,或使用“@”拆分行。做一些 groupby 来分组 games/home 场比赛。您也可以开始解析日期列。您可以使用 pandas.
处理很多数据