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

ส่วนด้านล่างนี้จะอธิบายว่า 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”
- นำเข้า urllib
- กำหนดฟังก์ชันหลักของคุณ
- ประกาศตัวแปร webUrl
- จากนั้นเรียกฟังก์ชัน urlopen ในไลบรารี urllib
- การขอ URL เรากำลังจะเปิดทำการคือ... Guruบทเรียนที่ 99 เกี่ยวกับ YouTube
- ต่อไป เราจะพิมพ์รหัสผลลัพธ์
- รหัสผลลัพธ์ได้มาจากการเรียกใช้ฟังก์ชัน getcode บนตัวแปร webUrl ที่เราสร้างขึ้น
- เราแปลงข้อมูลนั้นให้เป็นสตริง เพื่อที่จะนำไปต่อกับสตริง "รหัสผลลัพธ์" ของเรา
- นี่จะเป็นรหัส HTTP ปกติ "200" ซึ่งบ่งชี้ว่าคำขอ HTTP ได้รับการประมวลผลสำเร็จแล้ว
วิธีการดึงไฟล์ HTML จาก URL in Python
นอกจากนี้ คุณยังสามารถอ่านไฟล์ HTML ได้โดยใช้ฟังก์ชัน read() ใน Pythonเมื่อคุณรันโค้ด ไฟล์ HTML จะปรากฏในคอนโซล
- เรียกใช้ฟังก์ชัน 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 พื้นฐานเหมือนกัน ดังนั้นการตัดสินใจจึงขึ้นอยู่กับความสะดวกสบายเทียบกับจำนวนไลบรารีที่น้อยกว่า


