我在Windows 8 64位上使用Python.org版本2.7 64位。我有一些代码可以迭代一系列XHR请求,从网站上下载足总杯数据。字典'year_tournament_map'中的每个值代表每个赛季的足总杯的ID代码,这些代码将依次进行解析。
以下代码如下:
import json
import requests
import time
from datetime import date, timedelta
year_tournament_map = {
2013: 8273,
2012: 6978,
2011: 5861,
2010: 4940,
2009: 3419,
2008: 2689,
2007: 2175,
2006: 1645,
2005: 1291,
2004: 903,
2003: 579,
2002: 421,
2001: 243,
2000: 114,
1999: 26,
}
years = sorted(year_tournament_map.keys())
url = 'http://www.whoscored.com/tournamentsfeed/%s/Fixtures/'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}
for year in years:
start_date = date(year, 11, 1)
end_date = date(year + 1, 5, 31)
delta = end_date - start_date
for days in range(delta.days + 1):
time.sleep(0.5)
test_date = start_date + timedelta(days=days)
params = {'d': str(test_date).replace('-', ''), 'isAggregate': 'false'}
response = requests.get(url % year_tournament_map[year], params=params, headers=headers)
try:
json_data = response.content.replace("'", '"').replace(',,', ',null,')
fixtures = json.loads(json_data)
except ValueError:
print "Error!!!"
else:
if fixtures: # If there are fixtures
print ",\n".join([", ".join(str(x) for x in fixture) for fixture in fixtures]) # `fixtures` is a nested list
else:
print "No Fixtures Today: %s" % test_date
这很有效,所以我决定尝试在其他比赛中使用这种方法,例如英超联赛。我用以下字典替换了上面的字典,其中包含英超联赛的ID代码而不是足总杯:
year_tournament_map = {
1999: 2,
2000: 85,
2001: 191,
2002: 299,
2003: 429,
2004: 594,
2005: 836,
2006: 667,
2007: 1256,
2008: 1539,
2009: 1849,
2010: 2458,
2011: 2935,
2012: 3389,
2013: 3853,
2014: 4311, }
然而,当运行时,这不会按预期工作。第二季制作国际赛场,以及芬兰联赛或杯赛的第四个赛季。然后它会出现错误,说我正在尝试打印以屏蔽无ASCII / Unicode字符。
我被告知使用我的浏览器开发工具可以观察到项目“url ='http://www.whoscored.com/tournamentsfeed/%s/Fixtures/'”,但我无法找到它。
我想知道的是:
1)我是否在英超联赛数据中使用了正确的XHR网址 2)在sourcve代码中可以找到对上述URL的引用 3)为什么我的代码返回与我正在浏览的页面here相关的不相关/不正确的数据。
由于
答案 0 :(得分:0)
一旦我掌握了谷歌Chrome开发工具,我们最终解决了这个问题。在'控制台' Dev工具的选项卡,如果右键单击,您将获得打开XMLHTTPRequests的选项。完成此操作后,当您更改日历上的日期时,您会看到XHR提交到' tournamentsdfeed'。由于某些原因,在英超联赛数据中,数字季节标识符与页面顶部地址栏中显示的数字季节标识符不同。凭借足总杯数据,情况并非如此。
用于此的词典应为:
year_tournament_map = {
1999: 2,
2000: 89,
2001: 213,
2002: 359,
2003: 542,
2004: 803,
2005: 1208,
2006: 937,
2007: 2025,
2008: 2539,
2009: 3115,
2010: 4345,
2011: 5476,
2012: 6531,
2013: 7794,
2014: 9155, }
由于