Как сканировать динамический веб с API-адресом, возвращающим нуль? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть задача сканировать все Pulitzer Winner, и я обнаружил, что на этой странице есть все, что я хочу: https://www.pulitzer.org/prize-winners-by-year/2018.

Но у меня возникли следующие проблемы,

Проблема 1: Как сканировать динамическую страницу?Я использую python / urllib2.urlopen, чтобы получить содержимое страницы, но эта динамическая страница не возвращает реальное содержимое из этого.

Проблема 2: Затем я нашел URL API изdevtool: https://www.pulitzer.org/cache/api/1/winners/year/166/raw.json. Но когда я отправляю запрос GET с urllib2.urlopen, я всегда получаю нулевое значение.Как это случилось?Или как мне справиться с этим?

Если это слишком наивно для вас, пожалуйста, назовите несколько слов, чтобы я мог выучить его в Google.

Заранее спасибо!

1 Ответ

1 голос
/ 19 марта 2019

Один из способов справиться с этим - создать сеанс с использованием модуля запросов. Таким образом, он передает необходимые детали сеанса, необходимые для следующего вызова API, вы также должны передать еще один параметр Referer в заголовок. Это отличает, какой год вы ищете в вызове API.

import requests
s = requests.session()
url = "https://www.pulitzer.org/prize-winners-by-year/2017"
resp1 = s.get(url)
headers = {'Referer': 'https://www.pulitzer.org/prize-winners-by-year/2017'}
api = "https://www.pulitzer.org/cache/api/1/winners/year/166/raw.json"
data = s.get(api,headers=headers)

Теперь вы можете извлечь данные из ответа в данных.

...