【问题标题】:Build an XHR link on javascript website for python requests在 javascript 网站上为 python 请求构建 XHR 链接
【发布时间】:2020-09-08 03:02:42
【问题描述】:

我正在使用请求抓取以下网站Scorebing。 为此,我正在探索该网站以定位 XHR 调用并获取这样的 url

代码如下

import requests,json

header={some data from the XHR I got using Postman}
url='https://lv.scorebing.com/ajax/score/data?mt=0&nr=1&corner=1'

response=requests.get(url=url,headers=header,data=json.dumps({}))
response.json()

那里没有问题。我的问题是,如果我切换选项卡,例如从 Corner 切换到 Fixture,则不会调用新的 XHR。事实上,只有“Live Matches”和“Corners”允许这种直接的 XHR 连接。我看到一些 js 脚本已加载,但我无法从那里复制我的上一步。

我知道我可以使用 selenium 来抓取它,并且可能使用对页面 url 的常规请求并使用 BSoup,但我不明白为什么有些选项卡会调用 XHR 来加载其他类似选项卡使用的数据js。 我想知道如何对这些 js 调用进行逆向工程,以获得类似于第一部分的 API。

【问题讨论】:

    标签: javascript python python-3.x python-requests jqxhr


    【解决方案1】:

    首先,你应该知道Chrome中的XHR(XMLHttpRequest)会记录所有的ajax请求。


    Ajax 是什么?

    Ajax 是一组 Web 开发技术,在客户端使用许多 Web 技术来创建异步 Web 应用程序。

    Ajax 可以通过JavaScriptjQuery 来实现(嗯,jQuery 是一个JavaScript 库。它本质上是JavaScipt,但是jQuery 提供了一个关于ajax 的API。

    在您的示例页面中,源代码中有许多 ajax 请求:


    我想知道如何对这些 js 调用进行逆向工程以获得类似于第一部分的 API。

    如果你真的想通过源代码来做,你应该:

    1. 向页面发送GET 请求。
    2. 分析页面源代码,然后迭代每个Javascript。(同时发送GET请求。)
    3. 找到所有的ajax请求,同时发送GET请求,从中选择你需要的数据。

    【讨论】:

    • 您的意思是使用图片上的网址,即url='lv.scorebing.com/assets/js/comment.js?_31' 并执行requests.get?除了 selenium,我对任何与 javascript 相关的东西几乎都是新手
    • @puppet 所有关于js的url,不仅仅是comment.js
    • 对不起,我知道这对你来说可能是微不足道的,但正如我所说,我对 JS 一无所知。您的意思是,您需要请求每个 js 才能获得任何东西?如果是这样,您将如何在请求之间连接?或者,你的意思是我需要请求每个加载对我很重要的部分数据的 js,彼此独立
    • 再次,XHR 将记录ajax 请求。您需要的数据不会在源代码中加载。当您在浏览器中加载页面时,它将执行JavaScript。由于它在JavaScript 中有Ajax 请求,它也会向那些ajax url 发送请求。(例如,您找到它的url 之一是'https://lv.scorebing.com/ajax/score/data?mt=0&nr=1&corner=1')。然后将其放入页面。
    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多