Получить работоспособный URL от Python Получить запрос - PullRequest
0 голосов
/ 14 апреля 2020

Я очищаю загруженный сайт JS, используя запросы. Для этого я go проверяю веб-сайт, сетевую консоль и ищу вызовы XHR, чтобы узнать, где веб-сайт запрашивает данные и как. Процесс будет следующим:

Go по ссылке https://www.888sport.es/futbol/#/event/1006276426 в Chrome. Как только это будет загружено, вы можете нажать на множество элементов с уникальным идентификатором. После этого появится всплывающее окно с информацией. В упомянутом выше звонке XHR вы получаете прямую ссылку для получения этой информации следующим образом:

import requests
url='https://eu-offering.kambicdn.org/offering/v2018/888es/betoffer/outcome.json?lang=es_ES&market=ES&client_id=2&channel_id=1&ncid=1586874367958&id=2740660278'

#ncid is the date in timestamp format, and id is the unique id of the node clicked
response=requests.get(url=url,headers=headers)

Проблема в том, что это не удобно для пользователя и требует python. Если я добавлю этот последний URL в драйвер Chrome, я получу информацию, но в виде простого текста, и не смогу с ней взаимодействовать. Есть ли способ получить работоспособную ссылку из запроса, чтобы вручную вставить ее в драйвер Chrome и загрузить это всплывающее окно напрямую, как обычный веб-сайт?

1 Ответ

0 голосов
/ 14 апреля 2020

Вы должны сделать запросы как .json(), чтобы получить json dict, к которому вы можете получить доступ с помощью keys.

import requests
import json


def main(url):
    r = requests.get(url).json()
    print(r.keys())
    hview = json.dumps(r, indent=4)
    print(hview) # here to see it in nice view.


main("https://eu-offering.kambicdn.org/offering/v2018/888es/betoffer/outcome.json?lang=es_ES&market=ES&client_id=2&channel_id=1&ncid=1586874367958&id=2740660278")

Вывод:

dict_keys(['betOffers', 'events', 'prePacks'])
{
    "betOffers": [
        {
            "id": 2210856430,
            "closed": "2020-04-17T14:30:00Z",
            "criterion": {
                "id": 1001159858,
                "label": "Final del partido",
                "englishLabel": "Full Time",
                "order": [],
                "occurrenceType": "GOALS",
                "lifetime": "FULL_TIME"
            },
            "betOfferType": {
                "id": 2,
                "name": "Partido",
                "englishName": "Match"
            },
            "eventId": 1006276426,
            "outcomes": [
                {
                    "id": 2740660278,
                    "label": "1",
                    "englishLabel": "1",
                    "odds": 1150,
                    "participant": "FC Lokomotiv Gomel",
                    "type": "OT_ONE",
                    "betOfferId": 2210856430,
                    "changedDate": "2020-04-14T09:11:55Z",
                    "participantId": 1003789012,
                    "oddsFractional": "1/7",
                    "oddsAmerican": "-670",
                    "status": "OPEN",
                    "cashOutStatus": "ENABLED"
                },
                {
                    "id": 2740660284,
                    "label": "X",
                    "englishLabel": "X",
                    "odds": 6750,
                    "type": "OT_CROSS",
                    "betOfferId": 2210856430,
                    "changedDate": "2020-04-14T09:11:55Z",
                    "oddsFractional": "23/4",
                    "oddsAmerican": "575",
                    "status": "OPEN",
                    "cashOutStatus": "ENABLED"
                },
                {
                    "id": 2740660286,
                    "label": "2",
                    "englishLabel": "2",
                    "odds": 11000,
                    "participant": "Khimik Svetlogorsk",
                    "type": "OT_TWO",
                    "betOfferId": 2210856430,
                    "changedDate": "2020-04-14T09:11:55Z",
                    "participantId": 1001024009,
                    "oddsFractional": "10/1",
                    "oddsAmerican": "1000",
                    "status": "OPEN",
                    "cashOutStatus": "ENABLED"
                }
            ],
            "tags": [
                "OFFERED_PREMATCH",
                "MAIN"
            ],
            "cashOutStatus": "ENABLED"
        }
    ],
    "events": [
        {
            "id": 1006276426,
            "name": "FC Lokomotiv Gomel - Khimik Svetlogorsk",
            "nameDelimiter": "-",
            "englishName": "FC Lokomotiv Gomel - Khimik Svetlogorsk",     
            "homeName": "FC Lokomotiv Gomel",
            "awayName": "Khimik Svetlogorsk",
            "start": "2020-04-17T14:30:00Z",
            "group": "1\u00aa Divisi\u00f3n",
            "groupId": 2000053499,
            "path": [
                {
                    "id": 1000093190,
                    "name": "F\u00fatbol",
                    "englishName": "Football",
                    "termKey": "football"
                },
                {
                    "id": 2000051379,
                    "name": "Bielorrusa",
                    "englishName": "Belarus",
                    "termKey": "belarus"
                },
                {
                    "id": 2000053499,
                    "name": "1\u00aa Divisi\u00f3n",
                    "englishName": "1st Division",
                    "termKey": "1st_division"
                }
            ],
            "nonLiveBoCount": 6,
            "sport": "FOOTBALL",
            "tags": [
                "MATCH"
            ],
            "state": "NOT_STARTED",
            "groupSortOrder": 1999999000000000000
        }
    ],
    "prePacks": []
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...