在數字時代,數據就是力量。作為一名社會工作者,或許你想了解城市服務資源;作為一個編程初學者,你可能希望從網頁中自動提取新聞、課程或公開數據。今天,我們就來講一講 Python 標準庫中的一把“鑰匙”——urllib
?庫,它能幫你打開網頁數據的大門。
一、什么是 urllib?
urllib
?是 Python 內置的標準庫,不需要額外安裝。它可以幫助我們完成如下工作:
發送 HTTP 請求(如 GET、POST)
解析網頁 URL
模擬瀏覽器訪問網站
提交表單數據
下載網頁或文件
相當于一套爬蟲工具箱,輕量、易學、直接,適合入門者使用。
二、urllib 的模塊組成
urllib
?實際上是一個“包”,里面有幾個子模塊,各司其職:
子模塊 | 作用說明 |
---|---|
urllib.request | 用于發送請求、獲取網頁內容 |
urllib.parse | 用于解析和拼接 URL 地址 |
urllib.error | 用于處理異常和錯誤 |
urllib.robotparser | 用于讀取 robots.txt(爬蟲協議)文件 |
三、實戰操作:一步步抓取網頁內容
1. 請求一個網頁并讀取內容
from urllib import request
url =?"https://example.com"
response = request.urlopen(url)
html = response.read().decode("utf-8") ?
# 解碼成字符串
print(html)
? 說明:
urlopen()
?會像瀏覽器一樣訪問網頁read()
?獲取的是字節數據,要用?.decode()
?轉換成字符串默認是 GET 請求
2. 添加瀏覽器頭部(模擬正常訪問)
有的網站會檢測是不是“爬蟲”,我們可以加一個 User-Agent 來模擬瀏覽器:
from urllib import request
url =?"https://example.com"
headers = {"User-Agent":?"Mozilla/5.0"}
req = request.Request(url, headers=headers)
response = request.urlopen(req)
print(response.read().decode("utf-8"))
3. POST 請求(提交表單數據)
from urllib import request, parse
url =?"https://httpbin.org/post"
data = {"username":?"test","password":?"123456"}
data = parse.urlencode(data).encode("utf-8") ?# 編碼成 bytes
req = request.Request(url, data=data)
req.add_header("User-Agent",?"Mozilla/5.0")
response = request.urlopen(req)
print(response.read().decode("utf-8"))
4. 下載一個文件(如圖片或PDF)
from?urllib?import?request
img_url =?"https://www.example.com/image.jpg"
request.urlretrieve(img_url,?"downloaded.jpg")
print("下載完成!")
5. 解析 URL 和參數
from?urllib?import?parse
url =?"https://example.com/search?q=python&sort=desc"
result = parse.urlparse(url)
print(result.scheme) ??# https
print(result.netloc) ??# example.com
print(result.path) ? ??# /search
print(result.query) ? ?# q=python&sort=desc
四、應對爬蟲限制
雖然 urllib 簡單易用,但功能相對基礎。許多網站會設置反爬機制,例如:
驗證 User-Agent
限速(頻繁請求會被封)
需要登錄才能訪問
對于這些高級功能,可以搭配使用?time.sleep()
(加延遲),或者使用更強大的庫如?requests
、selenium
?等。
五、結語:數據不難,只要你敢動手
urllib
?是 Python 網絡爬蟲的入門首選。它雖然不像?requests
?那樣靈活優雅,但勝在“標準、輕量、易懂”。對剛接觸爬蟲的社會工作者、老師、學生來說,完全夠用。你只需掌握基本結構,便能自主從網頁中抓取你需要的資源數據。