下面是“Python爬虫库urllib的使用教程详解”的完整攻略。
一、什么是urllib
urllib是Python内置的HTTP请求库,包含四个模块:
- urllib.request:用于打开和读取URL请求的模块;
- urllib.error:用于处理请求中的异常;
- urllib.parse:用于解析URL;
- urllib.robotparser:用于解析Robots.txt文件。
二、urllib的基本使用
1. 发送HTTP请求
使用urllib.request模块发送HTTP请求,可以直接使用该模块提供的两个函数:
urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None)
urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
- urllib.request.urlopen:打开一个url,返回一个类似于文件的对象;
- urllib.request.urlretrieve:将远程数据下载到本地,返回一个类似于元组的对象。
2. 常见的HTTP请求方法
urllib.request支持常见的HTTP请求方法,比如GET、POST、HEAD等。
# 发送GET请求
response = urllib.request.urlopen(url)
# 发送POST请求
import urllib.parse
data = urllib.parse.urlencode({'key1': 'value1', 'key2': 'value2'}).encode('utf-8')
response = urllib.request.urlopen(url, data)
# 发送PUT请求
request = urllib.request.Request(url, data=data, method='PUT')
response = urllib.request.urlopen(request)
# 发送DELETE请求
request = urllib.request.Request(url, data=data, method='DELETE')
response = urllib.request.urlopen(request)
3. HTTP请求的请求头
urllib.request的请求头是一个字典类型,可以在请求头中加入一些信息。
import urllib.request
url = 'http://www.python.org'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
headers = {'User-Agent': user_agent}
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
4. 处理HTTP响应
HTTP响应对象是一个类文件对象,可以通过一些方法来访问它:
- read():读取响应的内容;
- getcode():获取响应的状态码;
- geturl():当前页面的url;
- info():获取响应头的信息。
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
status_code = response.getcode()
url = response.geturl()
info = response.info()
三、示例说明
示例1:爬取百度首页的HTML代码
import urllib.request
url = 'http://www.baidu.com'
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
print(html)
示例2:下载一张图片并保存到本地
import urllib.request
url = 'https://www.python.org/static/community_logos/python-logo.png'
urllib.request.urlretrieve(url, 'python-logo.png')