Python with BS4 and urllib - 如何移动/操作从网站提取的文本

标签 python beautifulsoup urllib

希望编写一个程序来查找任何给定球队的 NBA 输赢统计数据 - 然后返回数字(即 (3/6, 50%"))

更好的方式来理解... 运行代码 ---- 选择湖人队 ---- 返回下一场比赛的统计数据 ---- 客场获胜后、客场失利后、主场获胜后、主场失利后主场战绩的返回百分比 客场比赛同样 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 的所有主场比赛的列表,就像我一样 我基本上是两者的初学者。

我尝试过一些事情,比如搞乱 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

获得该数据框后,开始过滤行,或使用“@”分割行。进行一些分组,将客场比赛/主场比赛分组。您也可以开始解析日期列。您可以使用 pandas 来处理很多东西。

关于Python with BS4 and urllib - 如何移动/操作从网站提取的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53964455/

相关文章:

python - 在 python 中创建独立于平台的 GUI 可执行文件

python - 如何将外部标签添加到 BeautifulSoup 对象

python - 抓取时无法检索中文文本

python - 在未知子包中模拟 urlopen

python - 如何使用 Python 发送没有 'Host Header' 的请求?

python - 为什么使用 urllib2 打开 url 时出现乱码?

python - 如何从同步例程通知异步例程?

python - 需要使用 pandas 将纪元时间转换为 EST

php - python如何将mysql二进制转换(16)

python - 从多个链接构建一个表