Ing ngisor iki nerangake carane nemtokake URL gambar, ZIP, PDF, utawa file liyane ing Web ing Python, download lan simpen minangka file lokal.
- Download gambar kanthi nemtokake URL.
- Tuladha kode
urllib.request.urlopen()
:Mbukak URLopen()
:Tulis menyang file ing mode binar- Conto kode sing luwih prasaja
- Download file ZIP, file PDF, lsp.
- Ekstrak URL gambar ing kaca web.
- Yen nomer iku sequential
- Extract karo Sup ayu
- Batch ngundhuh pirang-pirang gambar saka dhaptar URL
Download gambar kanthi nemtokake URL.
Sampeyan bisa nggunakake perpustakaan standar mung kanggo ngundhuh file individu kanthi nemtokake URL; ora mbutuhake instalasi tambahan.
Tuladha kode
Ing ngisor iki minangka conto fungsi sing ndownload lan nyimpen file kanthi nemtokake URL lan path tujuan, lan panggunaane. Kode iki rada verbose kanggo panjelasan. Conto prasaja diwenehi ing ngisor iki.
import os import pprint import time import urllib.error import urllib.request def download_file(url, dst_path): try: with urllib.request.urlopen(url) as web_file: data = web_file.read() with open(dst_path, mode='wb') as local_file: local_file.write(data) except urllib.error.URLError as e: print(e)
url = 'https://www.python.org/static/img/python-logo.png' dst_path = 'data/temp/py-logo.png' download_file(url, dst_path)
Kanggo nemtokake direktori tujuan lan nyimpen file kanthi jeneng file URL, tindakake ing ngisor iki
def download_file_to_dir(url, dst_dir): download_file(url, os.path.join(dst_dir, os.path.basename(url))) dst_dir = 'data/temp' download_file_to_dir(url, dst_dir)
Iku extract jeneng berkas saka URL karo os.path.basename () lan gabung karo direktori kasebut karo os.path.join () kanggo generate path tujuan.
Bagean ing ngisor iki njlèntrèhaké bagéan saka akuisisi data lan bagéan saka nyimpen data minangka file.
urllib.request.urlopen():Mbukak URL
Gunakake urllib.request.urlopen() kanggo mbukak URL lan njupuk data. Elinga yen urllib.urlopen () wis ora digunakake ing Python 2.6 lan sadurungé. urllib.request.urlretrieve () durung diilangi, nanging bisa uga ing mangsa ngarep.
Supaya ora mandheg nalika ana pangecualian, ketik kesalahan kasebut kanthi nyoba lan kajaba.
Ing conto, urllib.error diimpor lan mung urllib.error.URLError sing dijupuk kanthi jelas. Pesen kesalahan bakal ditampilake nalika URL file ora ana.
url_error = 'https://www.python.org/static/img/python-logo_xxx.png' download_file_to_dir(url_error, dst_dir) # HTTP Error 404: Not Found
Yen sampeyan pengin uga nyekel pangecualian (FileNotFoundError, etc.) nalika nyimpen sacara lokal, tindakake ing ngisor iki.(urllib.error.URLError, FileNotFoundError)
Sampeyan uga bisa nggunakake Panyuwunan perpustakaan pihak katelu tinimbang urllib perpustakaan standar kanggo mbukak url lan entuk data.
Tulis menyang file ing mode binar kanthi mbukak ()
Data sing bisa dipikolehi karo urllib.request.urlopen () punika string byte (jinis bait).
Open() karo mode = ‘wb’ minangka argumen kapindho nulis data minangka binar. w tegese nulis lan b tegese binar.
Conto kode sing luwih prasaja
Nested karo statement bisa ditulis bebarengan, dipisahake dening koma.
Nggunakake iki, kita bisa nulis ing ngisor iki.
def download_file(url, dst_path): try: with urllib.request.urlopen(url) as web_file, open(dst_path, 'wb') as local_file: local_file.write(web_file.read()) except urllib.error.URLError as e: print(e)
Download file ZIP, file PDF, lsp.
Conto nganti saiki yaiku kanggo ngundhuh lan nyimpen file gambar, nanging amarga kita mung mbukak file ing web lan disimpen minangka file lokal, fungsi sing padha bisa digunakake kanggo jinis file liyane.
Sampeyan bisa ngundhuh lan nyimpen file kanthi nemtokake URL.
url_zip = 'https://from-locas.com/sample_header.csv.zip' download_file_to_dir(url_zip, dst_dir) url_xlsx = 'https://from-locas/sample.xlsx' download_file_to_dir(url_xlsx, dst_dir) url_pdf = 'https://from-locas/sample1.pdf' download_file_to_dir(url_pdf, dst_dir)
Elinga yen URL sing ditemtokake ing fungsi iki kudu dadi pranala menyang file kasebut.
Contone, ing kasus file repositori GitHub, URL ing ngisor iki nduweni ekstensi pdf nanging sejatine minangka kaca html. Yen URL iki ditemtokake ing fungsi ing ndhuwur, sumber html bakal diundhuh.
- https://github.com/from-locals/python-snippets/blob/master/notebook/data/src/pdf/sample1.pdf
Link menyang entitas file yaiku URL ing ngisor iki, sing kudu sampeyan nemtokake yen sampeyan pengin ngundhuh lan nyimpen file kasebut.
- https://github.com/from-locals/python-snippets/raw/master/notebook/data/src/pdf/sample1.pdf
Ana uga kasus nalika akses diwatesi dening agen pangguna, referrer, lan liya-liyane, saengga ora bisa didownload. Kita ora njamin yen kabeh file bakal diundhuh.
Gampang nggunakake Panyuwunan kanggo ngganti utawa nambah header panjaluk kayata agen pangguna.
Ekstrak URL gambar ing kaca web.
Kanggo ndownload kabeh gambar ing kaca bebarengan, extract URL gambar lan gawe dhaptar.
Yen nomer iku sequential
Yen URL gambar sing pengin didownload minangka nomer urut-urutan sing prasaja, gampang. Yen URL ora mung nomer urut nanging uga duwe sawetara keteraturan, luwih gampang kanggo nggawe dhaptar URL miturut aturan tinimbang scraping karo Sup Cantik (ndeleng ngisor).
Gunakake notasi pangerten dhaptar.
- Artikel sing gegandhengan:Nggunakake notasi pangerten dhaptar Python
url_list = ['https://example.com/basedir/base_{:03}.jpg'.format(i) for i in range(5)] pprint.pprint(url_list) # ['https://example.com/basedir/base_000.jpg', # 'https://example.com/basedir/base_001.jpg', # 'https://example.com/basedir/base_002.jpg', # 'https://example.com/basedir/base_003.jpg', # 'https://example.com/basedir/base_004.jpg']
Ing conto ing ndhuwur, {: 03} digunakake kanggo 3 digit nomer urut kapenuhan nol; {} digunakake nalika ngisi nol ora perlu, lan {:05} digunakake kanggo nomer 5 digit tinimbang 3 digit. Kanggo informasi luwih lengkap babagan cara format string str, waca artikel ing ngisor iki.
- Artikel sing gegandhengan:Konversi format ing Python, format (isi nol, notasi eksponensial, heksadesimal, lsp.)
Uga, ing kene kita nggunakake pprint kanggo nggawe output luwih gampang diwaca.
Extract karo Sup ayu
Kanggo ngekstrak URL gambar saka kaca web kanthi akeh, gunakake Beautiful Soup.
import os import time import urllib.error import urllib.request from bs4 import BeautifulSoup url = 'https://jv.from-locals.com/' ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) '\ 'AppleWebKit/537.36 (KHTML, like Gecko) '\ 'Chrome/55.0.2883.95 Safari/537.36 ' req = urllib.request.Request(url, headers={'User-Agent': ua}) html = urllib.request.urlopen(req) soup = BeautifulSoup(html, "html.parser") url_list = [img.get('data-src') for img in soup.find(class_='list').find_all('img')]
Ing conto, URL gambar cilik situs web iki diekstrak.
Struktur kasebut beda-beda gumantung saka kaca web, nanging dhasar kasebut dipikolehi kaya ing ngisor iki.
- Entuk dhaptar <img> tag obyek kanthi nemtokake kelas, id, lan sapiturute saka blok sing ngemot pirang-pirang gambar sing pengin didownload.
soup.find(class_='list').find_all('img')
- Entuk URL gambar saka unsur src utawa unsur data-src saka <img> tag.
img.get('data-src')
Kode sampel ing ndhuwur mung conto lan ora dijamin bisa digunakake.
Batch ngundhuh pirang-pirang gambar saka dhaptar URL
Yen sampeyan duwe dhaptar URL, sampeyan mung bisa nguripake kanggo daur ulang lan nelpon fungsi kanggo ngundhuh lan nyimpen file karo URL pisanan ditampilake. Amarga saka dhaftar URL sauntara, fungsi telpon download_image_dir () komentar metu kene.
download_dir = 'data/temp' sleep_time_sec = 1 for url in url_list: print(url) # download_file_dir(url, download_dir) time.sleep(sleep_time_sec) # https://example.com/basedir/base_000.jpg # https://example.com/basedir/base_001.jpg # https://example.com/basedir/base_002.jpg # https://example.com/basedir/base_003.jpg # https://example.com/basedir/base_004.jpg
Supaya ora kakehan server, Aku nggunakake time.sleep () kanggo nggawe wektu ngenteni saben download gambar. Unit kasebut ana ing sawetara detik, mula ing conto ing ndhuwur, modul wektu diimpor lan digunakake.
Conto kanggo file gambar, nanging jinis file liyane uga bisa diundhuh bebarengan, anggere padha kadhaptar.