Python爬虫库urllib的使用教程详解

  • Post category:Python

下面是“Python爬虫库urllib的使用教程详解”的完整攻略。

一、什么是urllib

urllib是Python内置的HTTP请求库,包含四个模块:

  1. urllib.request:用于打开和读取URL请求的模块;
  2. urllib.error:用于处理请求中的异常;
  3. urllib.parse:用于解析URL;
  4. 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')