@acrytzat
Ничего не умею

Как из json вытащить все ссылки на python?

Вот есть отрывок из json файла:
"editions":[{"title":"\u0423\u0447\u0435\u0431\u043d\u0438\u043a","description":null,"type":"1","publisher_id":"31","texts":[],"images":[{"title":null,"url":"\/attachments\/images\/tasks\/000\/096\/125\/0002\/5be55bf80f89d.jpg"},{"title":null,"url":"\/attachments\/images\/tasks\/000\/096\/125\/0002\/5be55bf80fca3.jpg"}],"documents":[]},{"title":"\u0420\u0435\u0448\u0435\u0431\u043d\u0438\u043a","description":null,"type":"2","publisher_id":"2","texts":[],"images":[{"title":null,"url":"\/attachments\/images\/tasks\/000\/096\/125\/0002\/5ba0f2d96dc89.jpg"},{"title":null,"url":"\/attachments\/images\/tasks\/000\/096\/125\/0002\/5ba0f2d96e060.jpg"},{"title":null,"url":"\/attachments\/images\/tasks\/000\/096\/125\/0002\/5ba0f2d96e5e4.jpg"},{"title":null,"url":"\/attachments\/images\/tasks\/000\/096\/125\/0002\/5ba0f2d96eaa3.jpg"}

Я могу вытащить только первую ссылку
def get_url_for_img(url):
    s=requests.get(url) 
    data = s.json()
    k = []
    k = data['editions'][0]['images'][0]['url']
    return k#/attachments/images/tasks/000/096/125/0002/5be55bf80f89d.jpg

а мне нужно будет спарсить все ссылки, и таких json файлов около тысячи и в каждом разное количество ссылок
  • Вопрос задан
  • 578 просмотров
Решения вопроса 3
@deliro
def get_url_for_img(url):
    data = requests.get(url).json()

    for edition in data['editions']:
        for image in edition['images']:
            yield image['url']


Либо проще:

def get_url_for_img(url):
    data = requests.get(url).json()
    result = []
    for edition in data['editions']:
        for image in edition['images']:
            result.append(image['url'])
    return result
Ответ написан
Комментировать
@bbkmzzzz
У Вас уже словарь, а не json. Все сводится к обходу словаря.
for item in data['editions']:
    for img in item['images']:
        print(img['url'])

Разберитесь со структурой данных, и все станет понятней
Ответ написан
Комментировать
Вы обращаетесь только к первой позиции - потому и лишь одна ссылка. Попробуйте так:
проходя по всем словарям списка data['editions'] генерировать список ссылок, проходя по всем словарям списка 'images', которым затем расширять итоговый список ссылок k
k = []
for i in data['editions']:
    im = [j['url'] for j in i['images']]
    k.extend(im)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы