网络抓取数据不是典型的表 - python

时间:2017-11-11 15:42:51

标签: python web-scraping

我正试图找到一种从rotogrinders页面中提取数据的方法,而不是典型的表格形式。我是新人,之前做过非常基本的事情:

    url = 'site.com' 
    html = requests.get(url).content
    df_list = pd.read_html(html)
    temp_df = df_list[-1]

这已经足够了......但这是不同的。

如果你看一下https://rotogrinders.com/lineups/nfl?week=1&site=fanduel,我想按照他们列出的顺序(从上到下)获取每个团队的球员名单。从那里我将能够按团队进行深度图表,但我需要获得球员和位置列表。每个团队都在一个单独的列中,然后由相互比赛的两个团队分组。我只需要姓名和职位,但如果有其他信息,那就没问题了。

基本上,这就是我想要的输出:

Alex Smith        QB $7.2K 31.0
Patrick Mahomes   QB 0
Kareem Hunt       RB $7.8K 43.1
Charcandrick West RB $5.2K 9.0
C.J. Spiller      RB $4.5K 0
Tyreek Hill       WR $7.2K 23.3
Chris Conley      WR $4.9K 5.3
Albert Wilson     WR $4.9K 6.2
De'Anthony Thomas WR $4.5K 0.7
Demarcus Robinson WR $4.5K 0
Travis Kelce      TE $6.7K 6.9
Demetrius Harris  TE $4.5K 8.5
Cairo Santos       K $4.6K 6.0
Tom Brady         QB $9.2K 10.7
Jimmy Garoppolo   QB $6K 0
Mike Gillislee    RB $6.7K 22.5
James White       RB $5.7K 8.3
Dion Lewis        RB $5.1K 0.9
Brandin Cooks     WR $7.9K 10.3
Chris Hogan       WR $6.2K 3.0
Danny Amendola    WR $6.1K 13.0
Malcolm Mitchell  WR $4.9K 0
Phillip Dorsett   WR $5K 0.0
Rob Gronkowski    TE $8.1K 4.3
Dwayne Allen      TE $4.9K 0.0
Stephen Gostkowski K $5.1K 9.0
...               ... .....

其次是其他团队。

编辑:所以这就是我正在做的事情。

url = 'https://rotogrinders.com/lineups/nfl?week=1&site=fanduel'
page = requests.get(url).content
soup = BeautifulSoup(page, 'html.parser')
name_box = soup.find('li', attrs={'class': 'player'})
name = name_box.text.strip() 

这就是我得到的。我试图弄清楚如何从我现在拥有的东西(这是第一个拥有所有空白区域的玩家)进入上面显示的输出。

这是我的输出:

print (name)
Alex Smith




                                        QB



                                    $7.2K

31.0

1 个答案:

答案 0 :(得分:1)

import bs4
import requests as re
import pandas as pd


alpha  = re.get('https://rotogrinders.com/lineups/nfl?week=1&site=fanduel')

beta = bs4.BeautifulSoup(alpha.text,'lxml')

gama = beta.findAll('a',{'class':'player-popup'})
lister = [a.text for a in gama]

positions = beta.findAll('span',{'class':'position'})
positionslist=[span.text for span in positions]

salaries = beta.findAll('span',{'class':"salary"})
salarieslist = [span.text for span in salaries]

points = beta.findAll('span',{'class':"fpts actual"})
pointslist = [span.text for span in points]



target = pd.DataFrame(

{

'player name':lister
,'positions':positionslist
,'salaries':salarieslist
,'points':pointslist
})