【发布时间】:2014-02-13 07:52:53
【问题描述】:
我正在尝试使用 Python 抓取某种类型的网站(例如this one),该网站使用AJAX 请求和jquery 来加载其中的一些内容(我也知道非常好的发布here,但目前我认为 Selenium 可能对我的问题没有必要)。
我可以看到使用 Firebug,当我加载菜单时,cookie 会以一种合乎逻辑的方式设置,它使用编号系统对事件进行分组,例如:
(Sport, Country, Competition, Event)
例如对于所有足球,英格兰赛事的数字是
(7, 55,0,0)
然后当调用javacript函数updateCenter()时,它会使用这组cookies根据这些cookie值构建一个URL,比如:
var loadUrl = "/_betting/getCenterColumn/" + centerStateCookie + "/" + selectedSport
+ "&" + selectedCategory + "&" + selectedCompetition + "&" + selectedEvent + "&" +
selectedLiveNowEvent + "&" + expandBetNbrInActiveSettledBets;
对于我上面的示例,如下所示:
/_betting/getCenterColumn/displayEventsFromCategory/7&55&0&0&0&0
最后发出AJAX 请求以使用从该 URL 加载的内容更新中心 DIV:
(.html(ajax_load) 初始调用只是在处理请求的同时加载了一个漂亮的旋转计时器 gif):
$("#PluginBettingCenterContent").html(ajax_load).load(loadUrl);
一切都很好,但 Firebug XHR 请求实际上表明请求的 GET 链接与上述不完全一致,但附加了一些数字:
GET /_betting/getCenterColumn/displayEventsFromCategory/7&55&0&0&0&0?_=1392198690842
?_=1392198690842 在这样的AJAX 请求中来自哪里?
由于我可以轻松抓取并构建进入 AJAX 加载的 URL,我希望只是直接抓取这些 URL,但我不明白最后一组数字和 ?_= 附加到这个URL GET 请求是,以及我如何模拟计算它们....
【问题讨论】:
-
这是一个纪元时间戳,附加它以防止缓存:stackoverflow.com/questions/12225576/…
-
@DavidFregoli 哦,您的意思是总是加载最新的赔率,而不是客户可能从以前的电话中坐在那里的某个旧页面?然后我应该能够从我的 python 代码中模拟这个时间戳。我看不到网站上
betting.js的确切位置,但这个时间戳被附加到ajax 调用中。它是否在jquery内部发生? -
是的,这是一个内部的东西,请参阅链接的 url(它可以被禁用)。浏览器根据 url 字符串缓存服务器的响应,所以这基本上是一种解决方法