వెబ్ నుండి చిత్రాలు మరియు ఇతర ఫైల్‌లను పైథాన్‌లో డౌన్‌లోడ్ చేయండి (వ్యక్తిగతంగా లేదా బ్యాచ్‌లలో)

వ్యాపారం

పైథాన్‌లో వెబ్‌లోని ఇమేజ్, జిప్, పిడిఎఫ్ లేదా ఇతర ఫైల్ యొక్క URLని ఎలా పేర్కొనాలో, దానిని డౌన్‌లోడ్ చేసి, దానిని స్థానిక ఫైల్‌గా ఎలా సేవ్ చేయాలో క్రింది వివరిస్తుంది.

  • URLని పేర్కొనడం ద్వారా చిత్రాలను డౌన్‌లోడ్ చేయండి.
    • కోడ్ ఉదాహరణ
    • urllib.request.urlopen():URLని తెరవండి
    • open():బైనరీ మోడ్‌లో ఫైల్‌కి వ్రాయండి
    • సరళమైన కోడ్ ఉదాహరణ
  • జిప్ ఫైల్‌లు, PDF ఫైల్‌లు మొదలైనవాటిని డౌన్‌లోడ్ చేయండి.
  • వెబ్ పేజీలో చిత్రం యొక్క 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() పైథాన్ 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)

జిప్ ఫైల్‌లు, PDF ఫైల్‌లు మొదలైనవాటిని డౌన్‌లోడ్ చేయండి.

ఇప్పటివరకు ఉన్న ఉదాహరణలు ఇమేజ్ ఫైల్‌లను డౌన్‌లోడ్ చేయడం మరియు సేవ్ చేయడం కోసం, కానీ మేము వెబ్‌లో ఫైల్‌ను తెరిచి స్థానిక ఫైల్‌గా సేవ్ చేస్తున్నందున, అదే విధులు ఇతర రకాల ఫైల్‌లకు ఉపయోగించవచ్చు.

మీరు 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 సాధారణ సీక్వెన్షియల్ నంబర్ అయితే, అది సులభం. URLలు సీక్వెన్షియల్ నంబర్‌లు మాత్రమే కాకుండా కొంత క్రమబద్ధతను కలిగి ఉంటే, బ్యూటిఫుల్ సూప్‌తో స్క్రాప్ చేయడం కంటే నిబంధనల ప్రకారం 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-అంకెల సంఖ్యకు ఉపయోగించబడుతుంది. స్ట్రింగ్ str ఫార్మాట్ పద్ధతి గురించి మరింత సమాచారం కోసం, కింది కథనాన్ని చూడండి.

అలాగే, ఇక్కడ మేము అవుట్‌పుట్‌ను సులభంగా చదవడానికి pprintని ఉపయోగిస్తున్నాము.

అందమైన సూప్‌తో సంగ్రహించండి

వెబ్ పేజీల నుండి చిత్ర URLలను బల్క్‌లో సేకరించేందుకు, బ్యూటిఫుల్ సూప్‌ని ఉపయోగించండి.

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

from bs4 import BeautifulSoup

url = 'https://te.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 మూలకం లేదా డేటా-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