数据是动态创建的,如果您查看实际来源,您可以看到Angularjs https://docs.angularjs.org/tutorial/step_02模板化。
你仍然可以通过模仿ajax调用来获取json格式的所有信息,在源码中yuuuuou还可以看到一个像这样的div:
<div id="AngularPanel" class="main-wrapper" ng-app="fivb"
data-servicematchcenterbar="/en/api/volley/matches/341/en/user/lives"
data-serviceteammatches="/en/api/volley/matches/WOG2016/en/user/team/3017"
data-servicelabels="/en/api/labels/Volley/en"
data-servicelive="/en/api/volley/matches/WOG2016/en/user/live/">
使用data-servicematchcenterbar
href 将为您提供所有信息:
from bs4 import BeautifulSoup
import requests
from urlparse import urljoin
r = requests.get('http://rio2016.fivb.com/en/volleyball/women/teams/srb-serbia#wcbody_0_wcgridpadgridpad1_1_wcmenucontent_3_Schedule')
soup = BeautifulSoup(r.content)
base = "http://rio2016.fivb.com/"
json = requests.get(urljoin(base, soup.select_one("#AngularPanel")["data-serviceteammatches"])).json()
在 json 中,您将看到如下输出:
{"Id": 7168, "MatchNumber": "006", "TournamentCode": "WOG2016", "TournamentName": "Women's Olympic Games 2016",
"TournamentGroupName": "", "Gender": "", "LocalDateTime": "2016-08-06T22:35:00",
"UtcDateTime": "2016-08-07T01:35:00+00:00", "CalculatedMatchDate": "2016-08-07T03:35:00+02:00",
"CalculatedMatchDateType": "user", "LocalDateTimeText": "August 06 2016",
"Pool": {"Code": "B", "Name": "Pool B", "Url": "/en/volleyball/women/results and ranking/round1#anchorB"},
"Round": 68,
"Location": {"Arena": "Maracanãzinho", "City": "Maracanãzinho", "CityUrl": "", "Country": "Brazil"},
"TeamA": {"Code": "SRB", "Name": "Serbia", "Url": "/en/volleyball/women/teams/srb-serbia",
"FlagUrl": "/~/media/flags/flag_SRB.png?h=60&w=60"},
"TeamB": {"Code": "ITA", "Name": "Italy", "Url": "/en/volleyball/women/teams/ita-italy",
"FlagUrl": "/~/media/flags/flag_ITA.png?h=60&w=60"},
"Url": "/en/volleyball/women/7168-serbia-italy/post", "TicketUrl": "", "Status": "Over", "MatchPointsA": 3,
"MatchPointsB": 0, "Sets": [{"Number": 1, "PointsA": 27, "PointsB": 25, "Hours": 0, "Minutes": "28"},
{"Number": 2, "PointsA": 25, "PointsB": 20, "Hours": 0, "Minutes": "25"},
{"Number": 3, "PointsA": 25, "PointsB": 23, "Hours": 0, "Minutes": "27"}],
"PoolRoundName": "Preliminary Round", "DayInfo": "Weekend Day",
"WeekInfo": {"Number": 31, "Start": 7, "End": 13}, "LiveStreamUri": ""},
您可以从中解析您需要的任何内容。