【问题标题】:Extra ?= and numbers in GET request header when called through AJAX通过 AJAX 调用 GET 请求标头中的额外 ?= 和数字
【发布时间】: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 字符串缓存服务器的响应,所以这基本上是一种解决方法

标签: jquery python ajax scrapy


【解决方案1】:

可能 URL 中的时间戳参数是可选的。

但是,如果你想像浏览器一样接近,你可以手动附加时间戳:

>>> import time
>>> url = 'http://example.com/index'
>>> '%s?_=%d' % (url, time.time() * 1000)
'http://example.com/index?_=1392249064418'

【讨论】:

    猜你喜欢
    • 2017-02-24
    • 2011-03-16
    • 1970-01-01
    • 2019-04-16
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多