අන්තර්ජාලයෙන් පින්තූර සහ අනෙකුත් ගොනු Python (තනි තනිව හෝ කණ්ඩායම් වශයෙන්) බාගන්න

ව්යාපාරික

පින්තුරයක URL එක, ZIP, PDF, හෝ අන්තර්ජාලයේ ඇති වෙනත් ගොනුව Python හි සඳහන් කරන්නේ කෙසේද, එය බාගත කර එය දේශීය ගොනුවක් ලෙස සුරකින්න ආකාරය පහත විස්තර කරයි.

  • URL එක සඳහන් කිරීමෙන් පින්තූර බාගන්න.
    • කේත උදාහරණය
    • urllib.request.urlopen():URL විවෘත කරන්න
    • open():ද්විමය ආකාරයෙන් ගොනුවකට ලියන්න
    • සරල කේත උදාහරණයක්
  • ZIP ගොනු, 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)

එය os.path.basename() සමඟ ඇති URL එකෙන් ගොනු නාමය උපුටා ගන්නා අතර ගමනාන්ත මාර්ගය ජනනය කිරීමට os.path.join() සමඟ සඳහන් කර ඇති නාමාවලිය සමඟ එය සම්බන්ධ කරයි.

පහත කොටස් දත්ත ලබා ගැනීමේ කොටස සහ ගොනුවක් ලෙස දත්ත සුරැකීමේ කොටස විස්තර කරයි.

urllib.request.urlopen():URL විවෘත කරන්න

URL විවෘත කිරීමට සහ දත්ත ලබා ගැනීමට urllib.request.urlopen() භාවිතා කරන්න. Python 2.6 සහ ඊට පෙර urllib.urlopen() ඉවත් කර ඇති බව සලකන්න. 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 එක විවෘත කර දත්ත ලබා ගැනීම සඳහා සම්මත library urllib වෙනුවට තෙවන පාර්ශවීය පුස්තකාල ඉල්ලීම් භාවිතා කිරීමට ද හැකිය.

විවෘත () හි ද්විමය මාදිලියේ ගොනුවකට ලියන්න

urllib.request.urlopen() සමඟ ලබා ගත හැකි දත්ත බයිට් තන්තුවකි (බයිට් වර්ගය).

Open() with mode=’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)

ZIP ගොනු, 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 එක සරල අනුක්‍රමික අංකයක් නම්, එය පහසුයි. URLs අනුක්‍රමික සංඛ්‍යා පමණක් නොව යම් විධිමත් බවක් ද තිබේ නම්, Beautiful Soup සමඟ සීරීමට වඩා නීති රීති අනුව 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ක් සඳහා භාවිතා වේ. string str හි ආකෘති ක්‍රමය පිළිබඳ වැඩි විස්තර සඳහා, පහත ලිපිය බලන්න.

ඒ වගේම මෙතනදි අපි pprint පාවිච්චි කරන්නේ output එක කියවන්න ලේසි කරන්න.

ලස්සන සුප් සමග සාරය

වෙබ් පිටු වලින් පින්තූර URL තොග වශයෙන් උපුටා ගැනීමට, Beautiful Soup භාවිතා කරන්න.

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

from bs4 import BeautifulSoup

url = 'https://si.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')
  • රූපයේ URL එක src මූලද්‍රව්‍යයෙන් හෝ <img> හි දත්ත-src මූලද්‍රව්‍යයෙන් ලබා ගන්න. ටැගය.
    • img.get('data-src')

ඉහත නියැදි කේතය උදාහරණයක් පමණක් වන අතර වැඩ කිරීමට සහතික නොවේ.

URL ලැයිස්තුවකින් පින්තූර කිහිපයක් බාගන්න

ඔබට URL ලැයිස්තුවක් තිබේ නම්, ඔබට එය for loop එකකට හරවා ගොනුව බාගත කර සුරැකීමට ශ්‍රිතය ඇමතීමට හැකි පළමු URL එක සමඟින්. තාවකාලික URL ලැයිස්තුව නිසා, බාගත_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