Python การเข้าถึงอินเทอร์เน็ตโดยใช้ Urllib.Request และ urlopen()

⚡ สรุปอย่างชาญฉลาด

urllib เป็นมาตรฐาน Python โมดูลสำหรับเข้าถึงข้อมูลทางอินเทอร์เน็ต ช่วยให้สามารถเปิดโปรแกรมได้ URLฟังก์ชัน urllib.request.urlopen() จะเชื่อมต่อกับที่อยู่เว็บและอ่านการตอบสนองจากเซิร์ฟเวอร์โดยตรงลงในไฟล์ .urllib.request.urlopen() Python.

  • 🔘 ห้องสมุดมาตรฐาน: urllib มาพร้อมกับ Python และรวมโมดูล request, error, parse และ robotparser ไว้ด้วยกัน URL งาน
  • ☑️ เปิด URL: ฟังก์ชัน urllib.request.urlopen() จะเปิดการเชื่อมต่อ และ getcode() จะส่งคืนสถานะ HTTP เช่น 200
  • โปรดอ่านคำตอบ: เมธอด read() ส่งคืนไบต์ดิบ ซึ่ง decode(“utf-8”) จะแปลงเป็นข้อความที่อ่านได้
  • 🧪 จัดการข้อผิดพลาด: ดักจับ HTTPError และ URLเกิดข้อผิดพลาดจาก urllib.error ดังนั้นคำขอที่ล้มเหลวจะไม่ทำให้โปรแกรมหยุดทำงาน
  • 🛠️ ดาวน์โหลดไฟล์: ฟังก์ชัน urlretrieve() จะบันทึกข้อมูลใดๆ URL บันทึกตรงลงดิสก์ เหมาะสำหรับรูปภาพ ไฟล์ PDF และชุดข้อมูล
  • 🤖 พร้อมสำหรับ AI: urllib ดึงชุดข้อมูลและข้อมูล API เพื่อใช้เป็นข้อมูลป้อนเข้าสำหรับโมเดลการเรียนรู้ของเครื่องและไปป์ไลน์ AI

Python การเข้าถึงอินเทอร์เน็ตโดยใช้ Urllib

ส่วนด้านล่างนี้จะอธิบายว่า urllib คืออะไร และวิธีการเปิดใช้งาน URL และอ่านโค้ด HTML รวมถึงวิธีการจัดการข้อผิดพลาด การดาวน์โหลดไฟล์ และการเลือกใช้ระหว่างไลบรารี urllib และ requests

urllib คืออะไร?

urllib คือ Python โมดูลที่สามารถใช้สำหรับการเปิด URLโดยจะกำหนดฟังก์ชันและคลาสเพื่อช่วยในการ... URL การปฏิบัติ

ด้วยระบบเส้นทาง Pythonนอกจากนี้ คุณยังสามารถเข้าถึงและดึงข้อมูลจากอินเทอร์เน็ต เช่น XML, HTML และ JSON แล้วนำข้อมูลเหล่านั้นมาใช้งานได้โดยตรง ในส่วนต่อไปนี้ เราจะมาดูวิธีการดึงข้อมูลจากเว็บกัน ตัวอย่างเช่น ในที่นี้เราใช้... Guruวิดีโอ 99 URLเข้าถึงโดยใช้ Pythonและพิมพ์ไฟล์ HTML ของสิ่งนี้ URL.

แพ็กเกจ urllib รวบรวมโมดูลหลายตัวไว้ด้วยกัน ได้แก่ urllib.request สำหรับการเปิดไฟล์ URLs, urllib.error สำหรับข้อยกเว้นที่คำขออาจก่อให้เกิด และ urllib.parse สำหรับการสร้างและแยกวิเคราะห์ URLs และ urllib.robotparser สำหรับอ่านไฟล์ robots.txt

วิธีการเปิด URL โดยใช้ Urlib

ก่อนที่เราจะรันโค้ดเพื่อเชื่อมต่อข้อมูลอินเทอร์เน็ต เราต้องนำเข้าไลบรารีบางตัวก่อน URL โมดูลไลบรารี หรือ “urllib”

จุดเปิด URL โดยใช้ Urlib

  • นำเข้า urllib
  • กำหนดฟังก์ชันหลักของคุณ
  • ประกาศตัวแปร webUrl
  • จากนั้นเรียกฟังก์ชัน urlopen ในไลบรารี urllib
  • การขอ URL เรากำลังจะเปิดทำการคือ... Guruบทเรียนที่ 99 เกี่ยวกับ YouTube
  • ต่อไป เราจะพิมพ์รหัสผลลัพธ์
  • รหัสผลลัพธ์ได้มาจากการเรียกใช้ฟังก์ชัน getcode บนตัวแปร webUrl ที่เราสร้างขึ้น
  • เราแปลงข้อมูลนั้นให้เป็นสตริง เพื่อที่จะนำไปต่อกับสตริง "รหัสผลลัพธ์" ของเรา
  • นี่จะเป็นรหัส HTTP ปกติ "200" ซึ่งบ่งชี้ว่าคำขอ HTTP ได้รับการประมวลผลสำเร็จแล้ว

วิธีการดึงไฟล์ HTML จาก URL in Python

นอกจากนี้ คุณยังสามารถอ่านไฟล์ HTML ได้โดยใช้ฟังก์ชัน read() ใน Pythonเมื่อคุณรันโค้ด ไฟล์ HTML จะปรากฏในคอนโซล

ไฟล์ HTML จาก URL in Python

  • เรียกใช้ฟังก์ชัน read() บนตัวแปร webUrl
  • เมธอด read() ช่วยให้คุณสามารถอ่านเนื้อหาของไฟล์ข้อมูลได้
  • อ่านเนื้อหาทั้งหมดของ URL เก็บไว้ในตัวแปรชื่อ data
  • รันโค้ดแล้วข้อมูลจะถูกแสดงในรูปแบบ HTML

นี่คือรหัสที่สมบูรณ์:

Python 2 ตัวอย่าง

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3 ตัวอย่าง

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

วิธีจัดการกับข้อผิดพลาดของ urllib: URLข้อผิดพลาดและ HTTPError

การร้องขอไม่ได้สำเร็จเสมอไป เมื่อมีสิ่งผิดปกติเกิดขึ้น urllib จะส่งข้อยกเว้นแทนที่จะส่งข้อมูลกลับ ดังนั้นการจัดการข้อผิดพลาดเหล่านี้จึงเป็นสิ่งสำคัญ โมดูล urllib.error กำหนดคลาสข้อยกเว้นหลักสองคลาส

  • ข้อผิดพลาด HTTP ออบเจ็กต์นี้จะเกิดขึ้นเมื่อเซิร์ฟเวอร์ส่งรหัสสถานะข้อผิดพลาดกลับมา เช่น 404 Not Found หรือ 500 Internal Server Error โดยจะประกอบด้วยรหัสสถานะและเนื้อหาการตอบกลับ
  • URLความผิดพลาด ข้อผิดพลาดนี้จะเกิดขึ้นเมื่อไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้เลย เช่น เนื่องจากชื่อโดเมนไม่ถูกต้องหรือไม่มีการเชื่อมต่ออินเทอร์เน็ต โดยจะมีแอตทริบิวต์ reason ที่อธิบายถึงความล้มเหลว

เนื่องจาก HTTPError เป็นคลาสย่อยของ URLเกิดข้อผิดพลาด ควรดักจับ HTTPError ก่อนเสมอ เพื่อให้สามารถจัดการข้อผิดพลาดแต่ละประเภทแยกกันได้:

from urllib.request import urlopen
from urllib.error import HTTPError, URLError

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

การจัดการกับข้อยกเว้นเหล่านี้จะช่วยป้องกันไม่ให้โปรแกรมของคุณหยุดทำงาน และช่วยให้คุณสามารถบันทึกปัญหา ลองส่งคำขออีกครั้ง หรือใช้ข้อมูลที่แคชไว้เป็นตัวเลือกสำรองได้

วิธีการดาวน์โหลดไฟล์จาก URL การใช้ urllib

การอ่าน a URL การบันทึกข้อมูลลงในหน่วยความจำนั้นเหมาะสำหรับหน้าเว็บขนาดเล็ก แต่สำหรับรูปภาพ เอกสาร PDF หรือชุดข้อมูล การบันทึกข้อมูลลงดิสก์โดยตรงจะง่ายกว่า โมดูล urllib.request มีสองวิธีง่ายๆ ในการทำเช่นนี้

ฟังก์ชัน urlretrieve() จะดาวน์โหลด URL บันทึกโดยตรงไปยังไฟล์ในเครื่องด้วยบรรทัดเดียว:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

เพื่อการควบคุมที่มากขึ้น ให้เปิด URL และเขียนไบต์ด้วยตนเอง เปิดไฟล์ในเครื่องในโหมดไบนารี เนื่องจาก urlopen() ส่งคืนไบต์ ไม่ใช่ข้อความ:

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

สำหรับไฟล์ขนาดใหญ่มาก ให้ทำการอ่านและเขียนในลูปโดยใช้ response.read(8192) เพื่อไม่ให้ไฟล์ทั้งหมดถูกเก็บไว้ในหน่วยความจำพร้อมกันในครั้งเดียว

urllib เทียบกับไลบรารี requests ใน Python

urllib เป็นส่วนหนึ่งของ Python เป็นไลบรารีมาตรฐาน จึงใช้งานได้ทุกที่โดยไม่ต้องติดตั้ง ไลบรารี requests จากผู้พัฒนาภายนอกไม่ได้รวมมาให้ แต่ผู้พัฒนาหลายคนนิยมใช้ไลบรารีนี้สำหรับงาน HTTP ทั่วไป เพราะไวยากรณ์สั้นกว่าและอ่านง่ายกว่า

ความแตกต่างที่สำคัญคือ:

  • การติดตั้ง: urllib มาพร้อมกับ Pythonในขณะที่ต้องติดตั้ง requests ด้วย pip
  • ถอดรหัส: urllib จะส่งคืนไบต์ดิบที่คุณต้องถอดรหัสด้วยตนเอง ในขณะที่ requests จะถอดรหัสข้อความและ JSON โดยอัตโนมัติ
  • สะดวก: ไลบรารี requests จัดการเซสชัน คุกกี้ และส่วนหัวแบบกำหนดเองด้วยโค้ดที่น้อยกว่า
  • อ้างอิง: urllib ไม่ได้เพิ่มอะไรเลย ในขณะที่ requests อาศัย urllib3 อยู่เบื้องหลัง

เลือก urllib เมื่อคุณต้องการไม่มีการพึ่งพาไลบรารีอื่น หรือต้องการเพียงแค่การร้องขอแบบรวดเร็วครั้งเดียว เลือก requests สำหรับโปรเจกต์ขนาดใหญ่ที่เกี่ยวข้องกับการตรวจสอบสิทธิ์ เซสชัน หรือการเรียกใช้ API บ่อยครั้ง ทั้งสองไลบรารีส่งคำขอ HTTP พื้นฐานเหมือนกัน ดังนั้นการตัดสินใจจึงขึ้นอยู่กับความสะดวกสบายเทียบกับจำนวนไลบรารีที่น้อยกว่า

คำถามที่พบบ่อย

เมธอด urlopen() จะส่งคืนอ็อบเจ็กต์การตอบสนอง HTTP ซึ่งโดยปกติจะเป็น http.client.HTTPResponse คุณสามารถเรียกใช้เมธอด read() เพื่อรับไบต์ดิบ เมธอด getcode() เพื่ออ่านรหัสสถานะ และเมธอด headers หรือ info() เพื่อตรวจสอบข้อมูลเมตา เช่น ประเภทเนื้อหาและความยาว

urllib2 เป็นของ Python 2 ใน Python 3. มีการปรับโครงสร้างใหม่: คุณสมบัติของมันถูกแยกออกเป็น urllib.request สำหรับการเปิด URLs และ urllib.error สำหรับข้อยกเว้น Code โค้ดที่เขียนขึ้นสำหรับ urllib2 ต้องได้รับการอัปเดตให้ใช้วิธีนำเข้า urllib.request แทน

ฟังก์ชัน read() ส่งคืนค่าเป็นไบต์ ไม่ใช่สตริง เนื่องจาก urlopen() ไม่ทราบการเข้ารหัสล่วงหน้า การเรียกใช้ decode(“utf-8”) จะแปลงไบต์เหล่านั้นให้เป็นข้อความที่อ่านได้ เพื่อให้คุณสามารถพิมพ์ ค้นหา หรือแยกวิเคราะห์เนื้อหา HTML หรือ JSON ได้

เปิด URL ด้วย urlopen() ให้อ่านไบต์ ถอดรหัส แล้วแยกวิเคราะห์ด้วยโมดูล json: json.loads(response.read().decode(“utf-8”)) ซึ่งจะส่งค่ากลับมาเป็น Python คุณสามารถใช้พจนานุกรมหรือรายการได้โดยตรง ซึ่งเป็นเรื่องปกติเมื่อเรียกใช้เว็บ API

ห่อ URL ในอ็อบเจ็กต์ urllib.request.Request และเพิ่มส่วนหัวก่อนเปิด: request.add_header(“User-Agent”, “Mozilla/5.0”) จากนั้นส่งคำขอไปยัง urlopen() ส่วนหัวแบบกำหนดเองจะมีประโยชน์เมื่อเซิร์ฟเวอร์บล็อกส่วนหัวเริ่มต้น Python ตัวแทนผู้ใช้

ใช่แล้ว urllib สามารถดึงชุดข้อมูล ไฟล์ CSV และ JSON จากเว็บ API ซึ่งคุณสามารถถอดรหัสและโหลดเข้าไปใน pandas หรือ NumPy ได้ นี่เป็นวิธีที่เบาและไม่ต้องพึ่งพาไลบรารีอื่นในการดึงข้อมูลฝึกฝนเข้าสู่กระบวนการเรียนรู้ของเครื่อง

ใช่แล้ว GitHub Copilot จะเติมข้อความอัตโนมัติสำหรับรูปแบบ urllib ทั่วไป เช่น การเรียกใช้ urlopen(), อ็อบเจ็กต์ Request และการจัดการข้อผิดพลาด try/except ช่วยลดความซ้ำซ้อนของโค้ด แต่คุณก็ยังควรตรวจสอบความถูกต้องอยู่ดี URLตัวช่วย AI แนะนำเกี่ยวกับส่วนหัว การจัดการข้อผิดพลาด และการจัดการข้อยกเว้น

เข้ารหัสพารามิเตอร์ของคุณด้วย urllib.parse.urlencode() แปลงเป็นไบต์ด้วย encode() จากนั้นส่งเป็นอาร์กิวเมนต์ data ไปยัง urlopen() หรืออ็อบเจ็กต์ Request การใส่ข้อมูลจะทำให้ urllib ส่งคำขอ POST แทนที่จะเป็น GET โดยอัตโนมัติ

สรุปโพสต์นี้ด้วย: