从站点查找空白单元格的刮表,python

2024-09-28 21:24:44 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我正在使用的网站:http://www.fantasypros.com/mlb/probable-pitchers.php

我想做的是每天运行代码,它返回当天投手的列表,所以只需要第一列。这是我目前掌握的情况。你知道吗

from bs4 import BeautifulSoup
import urllib.request

url = 'http://www.fantasypros.com/mlb/probable-pitchers.php'
page = requests.get(url)

soup = BeautifulSoup(page.content, 'lxml')

table = soup.find('table',{'class': 'table table-condensed'})
table2 = table.find('tbody') #this find just the rows with pitchers (excludes dates)

daysOnPage = []

for row in table.findAll('th'):
    daysOnPage.append(row.text)

daysOnPage.pop(0)
#print(daysOnPage)

pitchers = []
for row in table2.findAll('a', {'class': 'available mpb-available'}):
    pitchers.append(row.text)

这将返回页面上每个投手的列表。如果表上的每个单元格都被填满了,我可以做一些事情,比如删除第n个玩家或者类似的事情,但是这看起来很不雅观,而且也不起作用,因为你永远不知道哪些单元格是空白的。我已经浏览了table2.prettify()代码,但找不到任何指示空白单元格将要出现的位置的信息。你知道吗

谢谢你的帮助。你知道吗

编辑:修修补补一下,我想了很多:

for row in table2.find('tr'):
    for a in row.findAll('a', {'class': 'available mpb-available'}):
        pitchers.append(a.text)
continue

这会打印出第一排投手,这也是我稍后要解决的问题。为什么continue不让它遍历行?你知道吗


Tags: textinhttpfortablefindclassrow
1条回答
网友
1楼 · 发布于 2024-09-28 21:24:44

当我听到桌子声时,我想是熊猫。您可以让pandas.read_html为您进行解析,然后使用pandas.Series.dropna只返回有效值。你知道吗

In [1]: import pandas as pd

In [2]: dfs = pd.read_html('http://www.fantasypros.com/mlb/probable-pitchers.php')

In [3]: df = dfs[0].head(10)  # get the first dataframe and just use the first 10 teams for this example

In [4]: print(df['Thu Aug 6'])  # Selecting just one day by label
0    @WSHJ. Hellickson(7-6)SP 124
1         MIAM. Wisler(5-1)SP 306
2                             NaN
3     @NYYE. Rodriguez(6-3)SP 177
4        SFK. Hendricks(4-5)SP 51
5       STLM. Lorenzen(3-6)SP 300
6                             NaN
7                             NaN
8                             NaN
9          KCB. Farmer(0-2)SP 270
Name: Thu Aug 6, dtype: object

In [5]: active = df['Thu Aug 6'].dropna()  # now just drop any fields that are NaNs

In [6]: print(active)
0    @WSHJ. Hellickson(7-6)SP 124
1         MIAM. Wisler(5-1)SP 306
3     @NYYE. Rodriguez(6-3)SP 177
4        SFK. Hendricks(4-5)SP 51
5       STLM. Lorenzen(3-6)SP 300
9          KCB. Farmer(0-2)SP 270
Name: Thu Aug 6, dtype: object

我想您最不想做的就是解析表中的字符串以获得投手的名字。你知道吗

如果要将序列写入csv,可以通过以下方式直接执行:

    In [7]: active.to_csv('active.csv')

这将为您提供一个如下所示的csv:

0,@WSHJ. Hellickson(7-6)SP 126
1,MIAM. Wisler(5-1)SP 306
3,@NYYE. Rodriguez(6-3)SP 179
4,SFK. Hendricks(4-5)SP 51
5,STLM. Lorenzen(3-6)SP 301
9,KCB. Farmer(0-2)SP 267

相关问题 更多 >