2016-10-05 28 views
1

我想刮的學校和學校的籃球球員得到服務或verbalcommits.com如何湊「點擊顯示」領域與BeautifulSoup

使用此頁面作爲一個例子名稱數量:http://www.verbalcommits.com/players/jarrey-foster

訪問第一個報價(SMU)很容易,但所有其他報價都隱藏在「顯示其他報價」按鈕後面。當我檢查頁面時,我可以看到這些優惠,但我的刮刀沒有找到他們。我一直在使用下列內容:

page=urllib.request.urlopen("http://www.verbalcommits.com/players/jarrey-foster") #opens page  
soup = BeautifulSoup(page, 'html.parser') #makes page into a BS python object 
schools = soup.body.findAll('span',{"class":"team_name"}) 
print(schools) 

這將返回在它有隊名的第一個跨度,但不被隱藏的跨度的其餘部分。我需要添加什麼來訪問隱藏的頁面的其餘部分?

回答

1

你不能得到其他數據,因爲當你點擊按鈕,然後從JavaScript的服務器從

http://www.verbalcommits.com/player_divs/closed_offers?player_id=17766&_=1475626846752

讀它現在你可以使用這個網址與BS獲取數據。

我在Firefox中使用Firebug或在Chrome中使用Developer Tools來查找此URL。


編輯: HTML裏面我發現data-player-id="17766" - 它是在上述網址第一個參數。也許你可以找到第二個參數,所以你可以使用Python生成url。


編輯:我檢查URL

http://www.verbalcommits.com/player_divs/closed_offers?player_id=17766

,並給出了同樣的數據,因此你不需要第二個參數。

+0

@Matthew如果你喜歡點擊,看看'Selenium':

import requests from bs4 import BeautifulSoup with requests.Session() as session: response = session.get("http://www.verbalcommits.com/players/jarrey-foster") # get the player id soup = BeautifulSoup(response.content, "html.parser") player_id = soup.select_one("h1.player-name").get("data-player-id") # get closed offers response = session.get("http://www.verbalcommits.com/player_divs/closed_offers", params={"player_id": player_id}) soup = BeautifulSoup(response.content, "html.parser") # print team names for team in soup.select(".team_name"): print(team.get_text()) 
用於演示目的

打印隊名 –

2

詳細說明@furas's great answer。以下是您如何提取玩家ID並提出第二次獲取「封閉優惠」的請求。對於這一點,我們要保持與requests網絡刮會議:或者

UTEP 
Sam Houston State 
New Hampshire 
Rice 
Temple 
Liberty 
UL Lafayette