Хорошо, я сначала начну с кода, а затем объясню его.
import request import json
def get_and_print_data(url):
r = requests.get(url)
info = r.json()
for i in info['results']:
print(i['name'])
if info.get('next'):
get_and_print_data(info['next'])
get_and_print_data("https://swapi.co/api/people/")
Код здесь довольно плохой, так как этот метод слишком много делает (получает данные, обрабатывает их, определяет, есть ли следующие страницы и печатает ли данные). Это слишком много логики только для одной функции, но для нашего примера это нормально.
Итак, обо всем по порядку, почему функция? Потому что нам нужно выполнять одни и те же действия (получать, обрабатывать и печатать данные) несколько раз. раз, по одному на страницу. Что меняется? URL, так как для каждой страницы есть разные URL. Таким образом, у нас будет URL в качестве параметра этой функции.
Следующие несколько строк взяты из вашего кода, так что Я предполагаю, что вы знакомы с ними. Тогда у нас есть эта важная строка: if info.get('next'):
В словарях вы обычно извлекаете данные с помощью dictionary[key]
, и это вызывает и исключение, если ключ не существует, называется KeyError . В этом случае мы должны были использовать попытку / кроме проверки наличия ключа next . Даже если это считается более «питоническим» способом, этот с «если» может быть легче понять.
Что тогда делает .get('next')
? Ну, почти то же самое, но вместо броска и исключения он просто вернет None
, если ключа нет, и помнит, что в Python None
оценивается как ложное.
Короче говоря, это проверит, присутствует ли в вашем ответе ключ next (вы можете видеть, что API возвращает ноль для отсутствующих данных). Если ключ присутствует, мы будем вызывать ту же функцию с URL для следующей страницы и повторять до тех пор, пока в возвращенном JSON не будет отсутствовать (или будет отсутствовать) следующий ключ.
Конечно, нам нужно будет вызвать нашу функцию с начальным URL-адресом и продолжить с этого момента:)
Надеюсь, это поможет, и все легко понять!
encodeURIComponent будет работать. (Вы можете или не можете хотеть продвижение †? ’, в зависимости от того, что ожидает сценарий.)
var c= 'd e'
var query= '?a=b&c='+encodeURIComponent(c);
var uri= 'http://www.example.com/script?query='+encodeURIComponent(query);
window.location= uri;
Берет меня к:
, Когда Вы толпитесь, по которому это может казаться некогда декодируемым в строке состояния браузера, но Вы окажетесь в правильном месте.
Escape/неEscape () является неправильной вещью для кодирования параметров запроса, это понимает превратно символы Unicode и плюсы. Почти никогда нет случая, где Escape () - то, в чем Вы действительно нуждаетесь.
javascript:alert(escape('?key=value1&key2=value2'));
Хорошо работает для меня?