Python માં વેબ પરથી ઈમેજો અને અન્ય ફાઈલો ડાઉનલોડ કરો (વ્યક્તિગત રીતે અથવા બેચેસમાં)

બિઝનેસ

નીચે આપેલ સમજાવે છે કે પાયથોનમાં વેબ પર ઇમેજ, ઝીપ, પીડીએફ અથવા અન્ય ફાઇલનું URL કેવી રીતે સ્પષ્ટ કરવું, તેને ડાઉનલોડ કરો અને તેને સ્થાનિક ફાઇલ તરીકે સાચવો.

  • URL નો ઉલ્લેખ કરીને છબીઓ ડાઉનલોડ કરો.
    • કોડ ઉદાહરણ
    • urllib.request.urlopen():URL ખોલો
    • open():બાઈનરી મોડમાં ફાઇલ પર લખો
    • એક સરળ કોડ ઉદાહરણ
  • ઝીપ ફાઇલો, પીડીએફ ફાઇલો વગેરે ડાઉનલોડ કરો.
  • વેબ પેજ પર ઇમેજનું URL કાઢો.
    • જો સંખ્યા ક્રમિક છે
    • સુંદર સૂપ સાથે અર્ક
  • બેચ URL ની સૂચિમાંથી બહુવિધ છબીઓ ડાઉનલોડ કરો

URL નો ઉલ્લેખ કરીને છબીઓ ડાઉનલોડ કરો.

તમે પ્રમાણભૂત લાઇબ્રેરીનો ઉપયોગ ફક્ત વ્યક્તિગત ફાઇલોને તેમના URL નો ઉલ્લેખ કરીને ડાઉનલોડ કરવા માટે કરી શકો છો; કોઈ વધારાના ઇન્સ્ટોલેશનની જરૂર નથી.

કોડ ઉદાહરણ

નીચે આપેલ ફંક્શનનું ઉદાહરણ છે જે URL અને ગંતવ્ય પાથ અને તેનો ઉપયોગ સ્પષ્ટ કરીને ફાઇલને ડાઉનલોડ અને સાચવે છે. સમજૂતી ખાતર આ કોડ થોડો વર્બોઝ છે. એક સરળ ઉદાહરણ નીચે આપેલ છે.

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)

ગંતવ્ય નિર્દેશિકાનો ઉલ્લેખ કરવા અને URL ફાઇલ નામ સાથે ફાઇલને સાચવવા માટે, નીચેના કરો

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)

તે URL માંથી os.path.basename() સાથે ફાઇલનું નામ કાઢે છે અને ગંતવ્ય પાથ જનરેટ કરવા માટે os.path.join() સાથે ઉલ્લેખિત ડિરેક્ટરી સાથે જોડાય છે.

નીચેના વિભાગો ડેટા સંપાદનનો ભાગ અને ફાઇલ તરીકે ડેટા બચાવવાના ભાગનું વર્ણન કરે છે.

urllib.request.urlopen():URL ખોલો

URL ને ખોલવા અને ડેટા પુનઃપ્રાપ્ત કરવા માટે urllib.request.urlopen() નો ઉપયોગ કરો. નોંધ કરો કે urllib.urlopen() ને Python 2.6 અને તે પહેલાનામાં નાપસંદ કરવામાં આવ્યું છે. urllib.request.urlretrieve() હજુ સુધી નાપસંદ કરવામાં આવ્યું નથી, પરંતુ ભવિષ્યમાં હોઈ શકે છે.

જ્યારે કોઈ અપવાદ થાય ત્યારે રોકવાનું ટાળવા માટે, પ્રયાસ કરો અને સિવાય સાથે ભૂલને પકડો.

ઉદાહરણમાં, urllib.error આયાત કરવામાં આવે છે અને માત્ર urllib.error.URLError સ્પષ્ટ રીતે કેપ્ચર કરવામાં આવે છે. જ્યારે ફાઇલનું URL અસ્તિત્વમાં ન હોય ત્યારે ભૂલ સંદેશ પ્રદર્શિત થશે.

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

જો તમે સ્થાનિક રીતે સાચવતી વખતે અપવાદો (FileNotFoundError, વગેરે) મેળવવા માંગતા હો, તો નીચે મુજબ કરો.
(urllib.error.URLError, FileNotFoundError)

url ખોલવા અને ડેટા મેળવવા માટે પ્રમાણભૂત લાઇબ્રેરી urllib ને બદલે તૃતીય-પક્ષ લાઇબ્રેરી વિનંતીઓનો ઉપયોગ કરવો પણ શક્ય છે.

ઓપન () માં બાઈનરી મોડમાં ફાઇલ પર લખો

ડેટા કે જે urllib.request.urlopen() વડે મેળવી શકાય છે તે બાઈટ સ્ટ્રીંગ (બાઈટ પ્રકાર) છે.

ઓપન() મોડ=’wb’ સાથે બીજી દલીલ ડેટાને બાઈનરી તરીકે લખે છે. w એટલે લખવું અને b એટલે દ્વિસંગી.

એક સરળ કોડ ઉદાહરણ

નિવેદનો સાથે નેસ્ટેડને અલ્પવિરામ દ્વારા અલગ કરીને એક જ સમયે લખી શકાય છે.

આનો ઉપયોગ કરીને, આપણે નીચે લખી શકીએ છીએ.

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)

ઝીપ ફાઇલો, પીડીએફ ફાઇલો વગેરે ડાઉનલોડ કરો.

અત્યાર સુધીના ઉદાહરણો ઇમેજ ફાઇલો ડાઉનલોડ કરવા અને સાચવવા માટેના છે, પરંતુ અમે વેબ પર ફાઇલ ખોલીને તેને સ્થાનિક ફાઇલ તરીકે સાચવીએ છીએ, તેથી તે જ ફંક્શનનો ઉપયોગ અન્ય પ્રકારની ફાઇલો માટે કરી શકાય છે.

તમે 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)

નોંધ કરો કે આ ફંક્શનમાં ઉલ્લેખિત URL એ ફાઇલની જ લિંક હોવી જોઈએ.

ઉદાહરણ તરીકે, GitHub રીપોઝીટરી ફાઇલના કિસ્સામાં, નીચેના URL માં pdf એક્સ્ટેંશન છે પરંતુ વાસ્તવમાં એક html પેજ છે. જો આ URL ઉપરના ફંક્શનમાં ઉલ્લેખિત છે, તો html સ્ત્રોત ડાઉનલોડ થશે.

  • https://github.com/from-locals/python-snippets/blob/master/notebook/data/src/pdf/sample1.pdf

ફાઇલ એન્ટિટીની લિંક એ નીચેનું URL છે, જેનો તમારે ઉલ્લેખ કરવાની જરૂર છે જો તમે ફાઇલ ડાઉનલોડ કરવા અને સાચવવા માંગતા હોવ.

  • https://github.com/from-locals/python-snippets/raw/master/notebook/data/src/pdf/sample1.pdf

એવા કિસ્સાઓ પણ છે કે જ્યાં વપરાશકર્તા એજન્ટ, રેફરર, વગેરે દ્વારા ઍક્સેસ પ્રતિબંધિત છે, જે તેને ડાઉનલોડ કરવાનું અશક્ય બનાવે છે. અમે ખાતરી આપતા નથી કે બધી ફાઇલો ડાઉનલોડ થશે.

વપરાશકર્તા એજન્ટ જેવા વિનંતી હેડરોને બદલવા અથવા ઉમેરવા માટેની વિનંતીઓનો ઉપયોગ કરવો સરળ છે.

વેબ પેજ પર ઇમેજનું URL કાઢો.

એક જ સમયે પૃષ્ઠમાંની બધી છબીઓ ડાઉનલોડ કરવા માટે, પ્રથમ છબીઓના URL ને બહાર કાઢો અને સૂચિ બનાવો.

જો સંખ્યા ક્રમિક છે

જો તમે જે ઇમેજને ડાઉનલોડ કરવા માંગો છો તેનું URL સરળ ક્રમિક નંબર છે, તો તે સરળ છે. જો URLs માત્ર ક્રમિક સંખ્યાઓ જ નથી પરંતુ તેમાં કેટલીક નિયમિતતા પણ છે, તો સુંદર સૂપ (નીચે જુઓ) સાથે સ્ક્રેપ કરવાને બદલે નિયમો અનુસાર URL ની સૂચિ બનાવવી સરળ છે.

સૂચિ સમજણ સંકેતનો ઉપયોગ કરો.

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']

ઉપરના ઉદાહરણમાં, {:03} નો ઉપયોગ 3-અંકના શૂન્યથી ભરેલા અનુક્રમ નંબર માટે થાય છે; જ્યારે શૂન્ય-ભરણ જરૂરી ન હોય ત્યારે {} નો ઉપયોગ થાય છે, અને {:05} નો ઉપયોગ 3 અંકોને બદલે 5-અંકની સંખ્યા માટે થાય છે. સ્ટ્રિંગ સ્ટ્રિંગની ફોર્મેટ પદ્ધતિ વિશે વધુ માહિતી માટે, નીચેનો લેખ જુઓ.

ઉપરાંત, અહીં આપણે આઉટપુટને વાંચવામાં સરળ બનાવવા માટે pprint નો ઉપયોગ કરી રહ્યા છીએ.

સુંદર સૂપ સાથે અર્ક

જથ્થાબંધ વેબ પૃષ્ઠોમાંથી છબી URL ને કાઢવા માટે, બ્યુટીફુલ સૂપનો ઉપયોગ કરો.

import os
import time
import urllib.error
import urllib.request

from bs4 import BeautifulSoup

url = 'https://gu.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')]

ઉદાહરણમાં, આ વેબસાઇટની થંબનેલ ઇમેજનું URL કાઢવામાં આવ્યું છે.

વેબ પૃષ્ઠના આધારે માળખું બદલાય છે, પરંતુ મૂળભૂત રીતે તે નીચે મુજબ પ્રાપ્ત થાય છે.

  • <img>ની યાદી મેળવો તમે ડાઉનલોડ કરવા માંગો છો તે બહુવિધ ઈમેજો ધરાવતા બ્લોકના વર્ગ, આઈડી વગેરેનો ઉલ્લેખ કરીને ઑબ્જેક્ટ્સને ટેગ કરો.
    • soup.find(class_='list').find_all('img')
  • <img> ના src એલિમેન્ટ અથવા data-src એલિમેન્ટમાંથી ઇમેજનું URL મેળવો. ટેગ
    • img.get('data-src')

ઉપરોક્ત સેમ્પલ કોડ માત્ર એક ઉદાહરણ છે અને કામ કરવાની ખાતરી નથી.

બેચ URL ની સૂચિમાંથી બહુવિધ છબીઓ ડાઉનલોડ કરો

જો તમારી પાસે URL ની સૂચિ હોય, તો તમે તેને ફક્ત લૂપમાં ફેરવી શકો છો અને પ્રથમ URL સાથે ફાઇલ ડાઉનલોડ કરવા અને સાચવવા માટે ફંક્શનને કૉલ કરી શકો છો. કામચલાઉ URL સૂચિને કારણે, ફંક્શન કૉલ download_image_dir() ની અહીં ટિપ્પણી કરવામાં આવી છે.

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

સર્વરને ઓવરલોડ ન કરવા માટે, હું દરેક ઇમેજ ડાઉનલોડ માટે રાહ જોવાનો સમય બનાવવા માટે time.sleep() નો ઉપયોગ કરું છું. એકમ સેકન્ડોમાં છે, તેથી ઉપરના ઉદાહરણમાં, સમય મોડ્યુલ આયાત અને ઉપયોગમાં લેવાય છે.

ઉદાહરણ ઇમેજ ફાઇલો માટે છે, પરંતુ અન્ય પ્રકારની ફાઇલો એકસાથે ડાઉનલોડ કરી શકાય છે, જ્યાં સુધી તે સૂચિબદ્ધ હોય ત્યાં સુધી.

Copied title and URL