Python Truy cập Internet bằng Urllib.Request và urlopen()
⚡ Tóm tắt thông minh
urllib là tiêu chuẩn Python mô-đun truy cập dữ liệu internet, cho phép mở các chương trình URLvà truy xuất nội dung HTML, JSON hoặc nhị phân. Hàm urllib.request.urlopen() kết nối với một địa chỉ web và đọc trực tiếp phản hồi từ máy chủ. Python.

Các phần bên dưới giải thích urllib là gì, cách mở một tệp tin urllib. URL và đọc mã HTML của nó, cách xử lý lỗi, tải xuống tập tin và lựa chọn giữa thư viện urllib và thư viện requests.
urllib là gì?
urllib là một Python mô-đun có thể được sử dụng để mở URLNó định nghĩa các hàm và lớp để hỗ trợ trong việc... URL hành động.
Với PythonBạn cũng có thể truy cập và lấy dữ liệu từ internet, chẳng hạn như XML, HTML và JSON, rồi làm việc trực tiếp với dữ liệu này. Trong các phần dưới đây, chúng ta sẽ xem cách lấy dữ liệu từ web. Ví dụ, ở đây chúng ta sử dụng một Guru99 Video URL, truy cập nó bằng cách sử dụng Pythonvà in tệp HTML này. URL.
Gói urllib bao gồm một số mô-đun: urllib.request để mở URLs, urllib.error dùng để xử lý các ngoại lệ mà yêu cầu có thể gây ra, urllib.parse dùng để xây dựng và phân tích cú pháp. URLs, và urllib.robotparser để đọc các tệp robots.txt.
Làm thế nào để mở URL sử dụng Urllib
Trước khi chạy đoạn mã để kết nối với dữ liệu internet, chúng ta cần nhập khẩu... URL Mô-đun thư viện, hay “urllib”.
- Nhập urllib
- Xác định chức năng chính của bạn
- Khai báo biến webUrl
- Sau đó gọi hàm urlopen trong thư viện urllib.
- URL Chúng tôi đang khai trương... Guru99 hướng dẫn về YouTube
- Tiếp theo, chúng ta in mã kết quả.
- Mã kết quả được lấy bằng cách gọi hàm getcode trên biến webUrl mà chúng ta đã tạo.
- Chúng ta chuyển đổi nó thành một chuỗi, để có thể nối nó với chuỗi "mã kết quả" của chúng ta.
- Đây sẽ là mã HTTP thông thường “200”, cho biết yêu cầu HTTP đã được xử lý thành công.
Cách lấy tệp HTML từ một URL in Python
Bạn cũng có thể đọc tệp HTML bằng cách sử dụng hàm read() trong PythonKhi bạn chạy đoạn mã, tệp HTML sẽ xuất hiện trong bảng điều khiển.
- Gọi hàm read() trên biến webUrl.
- Phương thức read() cho phép bạn đọc nội dung của các tệp dữ liệu.
- Hãy đọc toàn bộ nội dung của... URL vào một biến có tên là data
- Chạy đoạn mã và nó sẽ in dữ liệu ở định dạng HTML.
Đây là mã hoàn chỉnh:
Python 2 Ví dụ
# # 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 Ví dụ
# # 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)
Cách xử lý lỗi urllib: URLLỗi và Lỗi HTTP
Một yêu cầu không phải lúc nào cũng thành công. Khi có lỗi xảy ra, urllib sẽ ném ra một ngoại lệ thay vì trả về dữ liệu, vì vậy việc xử lý các lỗi này rất quan trọng. Mô-đun urllib.error định nghĩa hai lớp ngoại lệ chính.
- Lỗi HTTP Sự kiện này được kích hoạt khi máy chủ trả về mã trạng thái lỗi, chẳng hạn như 404 Not Found hoặc 500 Internal Server Error. Nó mang theo mã trạng thái và nội dung phản hồi.
- URLlỗi Lỗi này được báo khi không thể truy cập máy chủ, ví dụ như do tên miền không chính xác hoặc không có kết nối internet. Nó mang theo thuộc tính reason giải thích nguyên nhân thất bại.
Vì HTTPError là một lớp con của URLLỗi, luôn bắt lỗi HTTPError trước để mỗi loại lỗi được xử lý riêng biệt:
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)
Việc xử lý các ngoại lệ này giúp chương trình của bạn không bị sập và cho phép bạn ghi lại sự cố, thử lại yêu cầu hoặc sử dụng dữ liệu đã lưu trong bộ nhớ cache.
Cách tải xuống tệp từ một URL Sử dụng urllib
Đọc một URL Việc lưu vào bộ nhớ có hiệu quả với các trang nhỏ, nhưng đối với hình ảnh, tài liệu PDF hoặc tập dữ liệu, việc lưu trực tiếp phản hồi vào ổ đĩa sẽ dễ dàng hơn. Mô-đun urllib.request cung cấp hai cách đơn giản để thực hiện việc này.
Hàm urlretrieve() tải xuống một URL ghi trực tiếp vào một tập tin cục bộ chỉ trong một dòng lệnh:
from urllib.request import urlretrieve urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")
Để điều khiển tốt hơn, hãy mở URL và tự ghi các byte. Mở tệp cục bộ ở chế độ nhị phân vì urlopen() trả về byte chứ không phải văn bản:
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())
Đối với các tệp rất lớn, hãy đọc và ghi trong một vòng lặp bằng cách sử dụng response.read(8192) để toàn bộ tệp không bao giờ được giữ trong bộ nhớ cùng một lúc.
So sánh urllib với thư viện requests trong Python
urllib là một phần của Python Đây là thư viện chuẩn, vì vậy nó hoạt động ở mọi nơi mà không cần cài đặt. Thư viện requests của bên thứ ba không được tích hợp sẵn, nhưng nhiều nhà phát triển thích sử dụng nó cho công việc HTTP hàng ngày vì cú pháp ngắn gọn và dễ đọc hơn.
Sự khác biệt chính là:
- Cài đặt: urllib đi kèm với PythonTrong khi đó, thư viện requests phải được cài đặt bằng pip.
- Giải mã: Thư viện urllib trả về các byte thô mà bạn phải tự giải mã, trong khi thư viện requests tự động giải mã văn bản và JSON.
- Thuận tiện: Thư viện requests xử lý phiên, cookie và các tiêu đề tùy chỉnh với ít mã hơn.
- Phụ thuộc: urllib không bổ sung thêm gì, trong khi requests dựa vào urllib3 ở bên dưới.
Hãy chọn urllib khi bạn muốn không có bất kỳ phụ thuộc nào hoặc chỉ cần một yêu cầu nhanh chóng, một lần duy nhất. Chọn requests cho các dự án lớn hơn liên quan đến xác thực, phiên hoặc các cuộc gọi API thường xuyên. Cả hai đều gửi cùng một yêu cầu HTTP cơ bản, vì vậy quyết định phụ thuộc vào sự tiện lợi so với danh sách phụ thuộc ít hơn.


