我正在努力削减篮球运动员从verbalcommits.com获得优惠的学校和学校名称
以此页面为例: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)
这将返回其中包含团队名称的第一个跨度,但不会返回隐藏的其余跨度。我需要添加什么才能访问隐藏的其余页面?
答案 0 :(得分:2)
详细说明@furas's great answer。以下是如何提取玩家ID并发出第二个请求以获得"已关闭的优惠"。为此,我们将使用requests
维护网络抓取会话:
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())
打印团队名称以进行演示:
UTEP
Sam Houston State
New Hampshire
Rice
Temple
Liberty
UL Lafayette
答案 1 :(得分:1)
您无法获取其他数据,因为当您单击按钮时,JavaScript会从服务器中读取
http://www.verbalcommits.com/player_divs/closed_offers?player_id=17766&_=1475626846752
现在您可以将此URL与BS一起使用来获取数据。
我在Firefox中使用Firebug
或在Chrome中使用Developer Tools
来查找此网址。
编辑:我发现data-player-id="17766"
- 这是上面网址中的第一个参数。也许你可以找到第二个参数,这样你就可以使用Python生成url。
编辑:我查了网址
http://www.verbalcommits.com/player_divs/closed_offers?player_id=17766
并且它提供相同的数据,因此您不需要第二个参数。