JSON POST-запрос возвращает ответ в HTML, а не JSON - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь очистить веб-сайт с помощью DOM, поэтому я подумал, что лучший способ сделать это - отправить запрос на сервер с помощью запросов, а затем получить ответ JSON.Я могу видеть ответ, полученный в инструменте проверки элемента Chrome, но не в python.Это мой код, я получаю HTML-ответ, который представляет собой целую страницу, но не JSON-ответ, представляющий собой данные, которые мне нужны.

import requests
import json
url="https://www.umass.edu/peoplefinder/"

headers = {'content-type': 'application/json'}
searchData={'q': 'Alex'}
response=requests.post(url, data=json.dumps(searchData), headers=headers)
content = response.json()    
print(content)

Я могу получить данные на вкладке ответов Chromeкак-то так.

{
    "ErrorHint": "",
    "ErrorCode": 0,
    "OverflowFlag": true,
    "Results": [{
    "Affil": ["Employee"],
    "Vcard": "/peoplefinder/vcard/xxxxxxxxxxx",
    "Title": "xxxxxxxxxxxx",
    "Phone": ["xxxxxxx"],
    "Dept": ["xxxxxxxxxxx"],
    "Building": ["xxxxxxxxxx"],
    "Email": "xxxxxxxxxxxx",
    "Name": "xxxxxxxxx"
}

Есть идеи как получить это внутри питона?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

вы можете сделать это так.

import requests
url="https://www.umass.edu/peoplefinder/engine/"

headers = {'Accept': 'application/json, text/javascript, */*',
'Content-Type': 'application/x-www-form-urlencoded'}
payload = {'q': 'Alex'}

s = requests.session()
response = s.post(url, data=payload, headers=headers)
print(response.json())
0 голосов
/ 24 мая 2018

Попробуйте это.Это должно принести вам желаемый ответ.

import requests

url = "https://www.umass.edu/peoplefinder/engine/"

headers = {
    'User-Agent': 'Mozilla/5.0',
    'Content-Type':'application/x-www-form-urlencoded'
}
response = requests.post(url, data={'q': 'Alex'}, headers=headers) 
print(response.json())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...