ខាងក្រោមនេះពន្យល់ពីរបៀបបញ្ជាក់ URL នៃរូបភាព ហ្ស៊ីប PDF ឬឯកសារផ្សេងទៀតនៅលើគេហទំព័រនៅក្នុង Python ទាញយកវា ហើយរក្សាទុកវាជាឯកសារមូលដ្ឋាន។
- ទាញយករូបភាពដោយបញ្ជាក់ URL ។
- ឧទាហរណ៍កូដ
urllib.request.urlopen()
:បើក URLopen()
:សរសេរទៅឯកសារក្នុងរបៀបគោលពីរ- ឧទាហរណ៍នៃកូដសាមញ្ញជាង
- ទាញយកឯកសារ ZIP ឯកសារ PDF ។ល។
- ស្រង់ URL នៃរូបភាពនៅលើគេហទំព័រ។
- ប្រសិនបើលេខមានលំដាប់
- ស្រង់ជាមួយស៊ុបដ៏ស្រស់ស្អាត
- បណ្តុំទាញយករូបភាពជាច្រើនពីបញ្ជី URLs
ទាញយករូបភាពដោយបញ្ជាក់ 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
ប្រើ urlib.request.urlopen() ដើម្បីបើក URL និងទាញយកទិន្នន័យ។ ចំណាំថា urlib.urlopen() ត្រូវបានបដិសេធនៅក្នុង Python 2.6 និងមុននេះ។ urllib.request.urlretrieve() មិនទាន់ត្រូវបានបដិសេធនៅឡើយទេ ប៉ុន្តែអាចនឹងមាននៅពេលអនាគត។
ដើម្បីជៀសវាងការបញ្ឈប់នៅពេលដែលមានករណីលើកលែង ចាប់កំហុសដោយព្យាយាម និងលើកលែង។
ក្នុងឧទាហរណ៍ urllib.error ត្រូវបាននាំចូល ហើយមានតែ urlib.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)
វាក៏អាចប្រើបណ្ណាល័យភាគីទីបី សំណើជំនួសឱ្យបណ្ណាល័យស្តង់ដារ urlib ដើម្បីបើក url និងទទួលបានទិន្នន័យ។
សរសេរទៅឯកសារក្នុងរបៀបប្រព័ន្ធគោលពីរក្នុង open()
ទិន្នន័យដែលអាចទទួលបានជាមួយ urlib.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 មិនត្រឹមតែជាលេខបន្តបន្ទាប់គ្នាប៉ុណ្ណោះទេ ប៉ុន្តែវាក៏មានភាពទៀងទាត់ខ្លះដែរ នោះវាកាន់តែងាយស្រួលក្នុងការធ្វើបញ្ជី URLs យោងទៅតាមច្បាប់ជាជាងការលុបចោលជាមួយនឹង Beautiful Soup (សូមមើលខាងក្រោម)។
ប្រើការយល់ឃើញក្នុងបញ្ជី។
- អត្ថបទដែលទាក់ទង:ការប្រើសញ្ញាសម្គាល់ការយល់បញ្ជី 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']
ក្នុងឧទាហរណ៍ខាងលើ {:03} ត្រូវបានប្រើសម្រាប់លេខបន្តបន្ទាប់ដែលបំពេញសូន្យ 3 ខ្ទង់។ {} ត្រូវបានប្រើនៅពេលដែលមិនចាំបាច់បំពេញសូន្យ ហើយ {:05} ត្រូវបានប្រើសម្រាប់លេខ 5 ខ្ទង់ជំនួសឱ្យ 3 ខ្ទង់។ សម្រាប់ព័ត៌មានបន្ថែមអំពីវិធីសាស្ត្រទម្រង់នៃ str សូមមើលអត្ថបទខាងក្រោម។
- អត្ថបទដែលទាក់ទង:ការបំប្លែងទម្រង់ជា Python ទ្រង់ទ្រាយ (សូន្យបំពេញ សញ្ញានិទស្សន្ត លេខគោលដប់ប្រាំមួយ ។ល។)
ផងដែរនៅទីនេះយើងកំពុងប្រើ pprint ដើម្បីធ្វើឱ្យលទ្ធផលងាយស្រួលអាន។
ស្រង់ជាមួយស៊ុបដ៏ស្រស់ស្អាត
ដើម្បីទាញយករូបភាព URLs ពីគេហទំព័រជាដុំ សូមប្រើស៊ុបដ៏ស្រស់ស្អាត។
import os import time import urllib.error import urllib.request from bs4 import BeautifulSoup url = 'https://km.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> tag objects ដោយបញ្ជាក់ class, id, etc. នៃ block ដែលមានរូបភាពច្រើនដែលអ្នកចង់ទាញយក។
soup.find(class_='list').find_all('img')
- ទទួលបាន URL នៃរូបភាពពីធាតុ src ឬធាតុ data-src នៃ <img> ស្លាក។
img.get('data-src')
កូដគំរូខាងលើគ្រាន់តែជាឧទាហរណ៍មួយប៉ុណ្ណោះ ហើយមិនធានាថាដំណើរការនោះទេ។
បណ្តុំទាញយករូបភាពជាច្រើនពីបញ្ជី URLs
ប្រសិនបើអ្នកមានបញ្ជី URLs អ្នកគ្រាន់តែអាចបង្វែរវាទៅជារង្វិលជុំ ហើយហៅទៅមុខងារដើម្បីទាញយក និងរក្សាទុកឯកសារជាមួយនឹង 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() ដើម្បីបង្កើតពេលវេលារង់ចាំសម្រាប់ការទាញយករូបភាពនីមួយៗ។ ឯកតាគិតជាវិនាទី ដូច្នេះក្នុងឧទាហរណ៍ខាងលើ ម៉ូឌុលពេលវេលាត្រូវបាននាំចូល និងប្រើប្រាស់។
ឧទាហរណ៍គឺសម្រាប់ឯកសាររូបភាព ប៉ុន្តែឯកសារប្រភេទផ្សេងទៀតអាចត្រូវបានទាញយករួមគ្នាផងដែរ ដរាបណាវាត្រូវបានរាយបញ្ជី។