使用python从xhr请求获取数据

kun*_*nal 5 python api xmlhttprequest

我正在尝试在网站https://www.jiocinema.com/search/avengers上获取电影和连续剧, 我已经使用 selenium 提取了电影,但我了解了 xhr 请求。我对这个概念很陌生,不知道我是否可以使用该 api?

API链接为:https ://prod.media.jio.com/apis/common/v3.1/search/search

xhr 响应看起来像在此输入图像描述

有什么方法可以从上面的 xhr 响应中获取数据吗?

相关:Python,从网站提取 XHR 响应数据

Joe*_*oel 3

实际上你不需要硒。您正在调用REST -API。

只需做这样的事情:

import requests
import traceback

def searchApi(query):
    endpoint = "http://prod.media.jio.com/apis/common/v3.1/search/auto"
    data = {
        "q": query
    }
    try:
        response = requests.post(endpoint, data=data)
        if(response.status_code == 200):
            for msg in response:
                print(msg)
    except Exception:
        print(traceback.format_exc())
Run Code Online (Sandbox Code Playgroud)

用法:

searchApi("avengers")
Run Code Online (Sandbox Code Playgroud)

原始输出:

{
    "code": 200,
    "message": "success",
    "data": {
        "items": [
            {
                "name": "avengers grimm",
                "type": "Movies"
            },
            {
                "name":"avengers  endgame   official trailer  hindi ",
                "type":"Videos"
            },
            {
                "name":"avengers  endgame   official trailer",
                "type":"Videos"
            },
            {
                "name":"avengers endgame   special look",
                "type":"Videos"
            }
            .... continues
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想直接访问数据响应。

import json

def searchApi(query):
    endpoint = "http://prod.media.jio.com/apis/common/v3.1/search/auto"
    data = {
        "q": query
    }
    try:
        response = requests.post(endpoint, data=data)
        if(response.status_code == 200):
            response = response.json()
            for msg in response["data"]["items"]:
                print("name: ", msg["name"], "type: ", msg["type"])
    except Exception:
        print(traceback.format_exc())
Run Code Online (Sandbox Code Playgroud)

格式化输出msg["name"]msg["type"]

name:  avengers grimm type:  Movies
name:  avengers  endgame   official trailer type:  Videos
name:  avengers endgame   special look type:  Videos
name:  avengers  endgame   official trailer  hindi  type:  Videos
name:  the avengers  earth s mightiest heroes type:  TV Shows
name:  marvel's avengers  age of ultron type:  Movies
name:  marvel's avengers assemble type:  TV Shows
name:  marvel's avengers  age of ultron   official trailer  hindi  type:  Videos
name:  marvel's avengers  age of ultron   official trailer type:  Videos
name:  marvel's the avengers type:  Movies
name:  marvel's the avengers   official trailer type:  Videos
name:  marvel's the avengers official trailer   hindi type:  Videos
name:  making of south indian avengers type:  Videos
Run Code Online (Sandbox Code Playgroud)