Znam adres URL obrazu w Internecie.
np. http://www.digimouth.com/news/media/2011/09/google-logo.jpg , na którym znajduje się logo Google.
Jak mogę pobrać ten obraz za pomocą Pythona bez faktycznego otwierania adresu URL w przeglądarce i ręcznego zapisywania pliku.
python
web-scraping
Pankaj Vatsa
źródło
źródło
Odpowiedzi:
Python 2
Oto prostszy sposób, jeśli wszystko, co chcesz zrobić, to zapisać go jako plik:
Drugim argumentem jest lokalna ścieżka, w której plik powinien zostać zapisany.
Python 3
Zgodnie z sugestią SergO poniższy kod powinien działać z Pythonem 3.
źródło
filename = link.split('/')[-1]
import urllib.request
iurllib.request.urlretrieve()
odpowiednio.file01.jpg
będzie zawierać twój obraz.źródło
open("file01.jpg", "wb")
przeciwnym razie możesz uszkodzić obraz.urllib.urlretrieve
może zapisać obraz bezpośrednio.Napisałem skrypt, który właśnie to robi i jest dostępny na moim githubie do użytku.
Użyłem BeautifulSoup, aby umożliwić mi przeanalizowanie dowolnej witryny internetowej w poszukiwaniu obrazów. Jeśli będziesz robić dużo skrobania sieci (lub zamierzasz używać mojego narzędzia), proponuję ci
sudo pip install BeautifulSoup
. Informacje o BeautifulSoup dostępne są tutaj .Dla wygody oto mój kod:
źródło
Można to zrobić za pomocą wniosków. Załaduj stronę i zrzuć zawartość binarną do pliku.
źródło
Python 3
urllib.request - rozszerzalna biblioteka do otwierania adresów URL
źródło
Rozwiązanie współpracujące z Pythonem 2 i Pythonem 3:
lub, jeśli dodatkowy wymóg
requests
jest akceptowalny i jeśli jest to adres URL http:źródło
Zrobiłem scenariusz rozwijający skrypt Yup. Naprawiłem kilka rzeczy. Teraz pominie 403: Zakazane problemy. Nie nastąpi awaria, gdy nie uda się pobrać obrazu. Próbuje uniknąć uszkodzonych podglądów. Pobiera właściwe bezwzględne adresy URL. Zawiera więcej informacji. Można go uruchomić z argumentem z wiersza poleceń.
źródło
Korzystanie z biblioteki żądań
źródło
To jest bardzo krótka odpowiedź.
źródło
Wersja dla Pythona 3
Dostosowałem kod @madprops do Pythona 3
źródło
Coś nowego dla Pythona 3 przy użyciu żądań:
Komentarze w kodzie. Funkcja gotowa do użycia.
źródło
Późna odpowiedź, ale
python>=3.6
możesz użyć dload , czyli:jeśli potrzebujesz obrazu jako
bytes
, użyj:zainstaluj za pomocą
pip3 install dload
źródło
źródło
TypeError: a bytes-like object is required, not 'Response'
. To musi byćhandler.write(img_data.content)
handler.write(img_data.read())
.