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.

  • 🔘 Thư viện chuẩn: urllib đi kèm với Python và đóng gói các mô-đun yêu cầu, lỗi, phân tích cú pháp và robotparser cho URL nhiệm vụ.
  • ☑️ mở URL: Hàm urllib.request.urlopen() mở một kết nối, và hàm getcode() trả về trạng thái HTTP, ví dụ như 200.
  • Đọc câu trả lời: Phương thức read() trả về các byte thô, mà decode(“utf-8”) sẽ chuyển đổi thành văn bản dễ đọc.
  • 🧪 Xử lý lỗi: Bắt lỗi HTTPError và URLLỗi từ urllib.error nên các yêu cầu thất bại sẽ không bao giờ làm sập chương trình.
  • 🛠️ Tải tập tin: Hàm urlretrieve() lưu bất kỳ URL Ghi trực tiếp vào ổ đĩa, lý tưởng cho hình ảnh, PDF và tập dữ liệu.
  • 🤖 AI đã sẵn sàng: urllib tìm nạp các tập dữ liệu và dữ liệu API dùng để cung cấp thông tin cho các mô hình học máy và các quy trình trí tuệ nhân tạo.

Python Truy cập Internet bằng Urllib

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”.

Mở URL sử dụng 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.

Tệp HTML từ URL in Python

  • 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.

Câu Hỏi Thường Gặp

Phương thức `urlopen()` trả về một đối tượng phản hồi HTTP, thường là `http.client.HTTPResponse`. Bạn có thể gọi `read()` để lấy các byte thô, `getcode()` để đọc mã trạng thái và `headers` hoặc `info()` để kiểm tra siêu dữ liệu như loại nội dung và độ dài.

urllib2 thuộc về Python 2. Trong Python 3. Nó đã được tổ chức lại: các tính năng của nó được chia thành urllib.request để mở. URLKiểm tra lỗi bằng `s` và `urllib.error` để biết các ngoại lệ. Code Đoạn mã được viết cho urllib2 cần được cập nhật để nhập urllib.request thay thế.

Hàm `read()` trả về các byte chứ không phải một chuỗi, vì `urlopen()` không biết trước mã hóa. Gọi hàm `decode(“utf-8”)` sẽ chuyển đổi các byte đó thành văn bản dễ đọc để bạn có thể in, tìm kiếm hoặc phân tích nội dung HTML hoặc JSON.

Mở URL Với urlopen(), đọc các byte, giải mã chúng, sau đó phân tích cú pháp bằng mô-đun json: json.loads(response.read().decode(“utf-8”)). Điều này trả về một Python Từ điển hoặc danh sách mà bạn có thể sử dụng trực tiếp, điều này khá phổ biến khi gọi các API web.

Bọc URL Trong đối tượng urllib.request.Request, hãy thêm tiêu đề trước khi mở nó: request.add_header(“User-Agent”, “Mozilla/5.0”), sau đó truyền yêu cầu đến urlopen(). Các tiêu đề tùy chỉnh hữu ích khi máy chủ chặn các tiêu đề mặc định. Python Tác nhân người dùng.

Đúng vậy. urllib có thể lấy các tập dữ liệu, tệp CSV và JSON từ các API web, sau đó bạn giải mã và tải chúng vào pandas hoặc NumPy. Đây là một cách nhẹ nhàng, không phụ thuộc vào bất kỳ thư viện nào khác để đưa dữ liệu huấn luyện vào quy trình học máy.

Đúng vậy. GitHub Copilot tự động hoàn thành các mẫu urllib phổ biến như các lệnh gọi urlopen(), đối tượng Request và xử lý lỗi try/except. Điều này giúp tăng tốc độ viết mã lặp lại, nhưng bạn vẫn nên kiểm tra lại. URLcác đề xuất về xử lý lỗi, tiêu đề và ngoại lệ mà trợ lý AI đưa ra.

Mã hóa các tham số của bạn bằng urllib.parse.urlencode(), chuyển đổi chúng thành byte bằng encode(), sau đó truyền chúng làm đối số data cho urlopen() hoặc một đối tượng Request. Việc cung cấp data sẽ tự động khiến urllib gửi yêu cầu POST thay vì yêu cầu GET.

Tóm tắt bài viết này với: