在数字时代,数据就是力量。作为一名社会工作者,或许你想了解城市服务资源;作为一个编程初学者,你可能希望从网页中自动提取新闻、课程或公开数据。今天,我们就来讲一讲 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
那样灵活优雅,但胜在“标准、轻量、易懂”。对刚接触爬虫的社会工作者、老师、学生来说,完全够用。你只需掌握基本结构,便能自主从网页中抓取你需要的资源数据。