【发布时间】:2014-08-16 20:22:00
【问题描述】:
我在 Windows 8 64 位上使用 Python.org 版本 2.7 64 位。我有一些代码可以遍历一系列 XHR 请求,以从网站上下载 FA Cup 数据。字典'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 URL 2)在源代码引用上述URL的地方可以找到 3) 为什么我的代码返回与我正在浏览的页面上的内容无关/不正确的数据here。
谢谢
【问题讨论】:
-
您没有提及您的浏览器,但对于大多数浏览器,
F12会打开工具。 -
@JeremyJStarcher 我很好地找到了开发工具,我只是无法在页面源代码中找到对“锦标赛源”提交的任何地方的引用。我可以看到 Javascript 是日历选择日期的权力所在,但看不到此提交的去向。谢谢。
标签: python json xmlhttprequest