Проблема с файлами, загруженными с помощью python - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь загрузить некоторые jpgs с сайта и сохранить их на своем жестком диске, но когда я делаю это, я не могу открыть файлы из-за проблем с форматированием, все эти файлы также по какой-то причине имеют 115 КБ.

Я пытался изменить размер чанка и немного поиграл с запросом (), но это не сработало. В оболочке нет ошибок. Ссылка на сайт правильная.

url = 'http://<site>'
os.makedirs('photos', exist_ok = True)
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, features="html.parser")
elem = soup.select('a img')
if elem == []:
    print('no images')
else:
    for i in range(len(elem)):
        link = elem[i].get('src')
        if link != None:
            plik = open(os.path.join('photos', os.path.basename(link)), 'wb')
            for chunk in res.iter_content(100000):
                plik.write(chunk)
            plik.close()
            print('downloaded %s' % os.path.basename(link))

Решение (в цикле 'for i ...'):

url = 'http://<site>'
os.makedirs('photos', exist_ok = True)
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, features="html.parser")
elem = soup.select('a img')
if elem == []:
    print('no images')
else:
    for i in range(len(elem)):
        link = url + elem[i].get('src')
        res2 = requests.get(link)
        res2.raise_for_status()
        if link != None:
            plik = open(os.path.join('photos', os.path.basename(link)), 'wb')
            for chunk in res.iter_content(100000):
                plik.write(chunk)
            plik.close()
            print('downloaded %s' % os.path.basename(link))

1 Ответ

0 голосов
/ 24 марта 2019

После прочтения ответа html-страницы и извлечения источника изображения вы должны будете использовать его, чтобы сделать еще один запрос http (s) для потоковой передачи изображения с этого URL.

В настоящий момент кажется, чтовы пытаетесь продолжить чтение из первоначального ответа.

Примечание. Для всех ссылок и привязок браузеры отправляют дополнительный http-запрос

...