【问题标题】:php scrape dynamically loaded content via ajax using knockout.jsphp 使用 knockout.js 通过 ajax 抓取动态加载的内容
【发布时间】:2017-06-15 22:54:52
【问题描述】:

我需要从使用 knockout.js 通过 ajax 加载的网站中抓取一些数据(我不知道它在使用哪种技术。)

网站是 www.msc.com。在这里,我正在搜索从巴塞罗那到迈阿密的时间表。所以结果是通过 ajax 加载的,但不会显示在控制台或 firebug 中。

我尝试了太多次。任何帮助或建议都将不胜感激。

【问题讨论】:

  • 您能否更具体地说明您的目标是什么数据?如果我在 NETWORK 选项卡下打开控制台,我可以看到 PORTS 是使用 JSON 对象返回的。请告诉我们在什么 URL 中输入什么内容以及您希望获得什么的确切路径。
  • 抱歉。当我们搜索装货港和卸货港等时间表时。前任。装货港:巴塞罗那和卸货港:迈阿密。我们将在下面加载所有船只的详细信息。我希望删除该内容。

标签: php ajax knockout.js


【解决方案1】:

他们的脚本位于:https://www.msc.com/CMSTemplates/CraftedCMS/WebServices/RouteFinder.svc/Routes

他们阻止您直接在浏览器选项卡/窗口中调用它,可能是因为您尝试执行的操作违反了他们的政策。如果他们希望人们抓取他们的数据,他们不会阻止对其 API 的直接请求,或者他们会提供另一个公开记录的 API 供您在服务器上使用。

话虽如此,您可以在浏览器控制台中看到他们的 Web 服务返回 JSON 对象。您将不得不通过伪造协议变量来破解(可能是非法的)您的方式,以实现您的目标。首先要考虑的是,它们仅在以下情况下通过该 Web 服务返回结果:

a) 调用是通过 XMLHttpRequest 作为 POST 进行的。 (这个你可以很容易地伪造它,但接下来的点,不是那么多......)

b) 调用是使用引用者进行的,在这种情况下,引用者是:https://www.msc.com/routefinder?fromId=406&isCountryFrom=false&toId=83&isCountryTo=false

c) 调用将 cookie 传递给服务器,该 cookie 已加密和签名,因此每个会话都在他们的数据库中,并且您的密钥可能是唯一的,所以祝你解密这个:CMSPreferredCulture=fr-FR; ASP.NET_SessionId=gza5rfjrog2eb21ukrzma223; BIGipServerkentico.app~kentico_pool=439883018.20480.0000; bbbbbbbbbbbbbbb=LIKIGEACDJHDJPGPEOKGJBKODKDGOMHNKAEGEGKNODEDAEILEICBMLNLEFMAOIPPKMOIBBFAILFEEKJPIJDCBDDLFNBBMBPBGGKAIDOCMGHBEEIDMLPMIJJAMNFNIFMI; rxVisitor=1497537754979PTPODMSFNIR8BFVAKK353FS76M2D1KNN; dtPC=3$537845860_975h-vCQTABPJMGEOKDPDVNLHPPCDASGAPMCPCBA; rxvt=1497539656937|1497537754995; dtSa=-; dtLatC=8; _ga=GA1.2.1247106544.1497537756; _gid=GA1.2.879601947.1497537756; _gali=结果; cookiePolicyApproved=true; MSCAgencyId=355840; _gat=1; _gat_local=1; dtCookie=3$B74DFC30736F7DBF485B79C31C55B167|www.msc.com|1

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多