1. urllib库简介
Python中,urllib库使用于对URL进行各种操作,例如:打开url,解析http/https/ftp协议、处理cookies、访问用户验证,处理代理等许多工作。urllib库包含了四个模块:
urllib.request:打开和读取URL(包括各种访问方式)的模块。其中最常使用的是urllib.request.urlopen()方法。下面就会详细介绍该方法的使用方法。
urllib.error:包含打开URL时,产生的各种错误信息异常处理模块。
urllib.parse:包含URL解析方法,例如:在HTTP_URL中,对用户名/密码进行编码;把参数表转换成字符串;从字符串中解析URL等等。
urllib.robotparser:用于处理robots.txt文件,它的作用是告知爬虫程序,哪些页面能抓取,哪些页面不能抓取。
2. urllib.request.urlopen方法详解
其中,最常使用的是urllib.request.urlopen()方法,用于打开URL,并可按照需要返回读取到的数据或者对数据进行操作。
下面是urllib.request.urlopen()的基本语法:
urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None)
其中:
url是指定的URL,这可以是字符串,也可以是一个Request对象。
data是提交给该URL的数据,如果没有就填写 None。
timeout设置请求超时的时限,单位秒,默认是socket._GLOBAL_DEFAULT_TIMEOUT。
cafile是指定CA根证书文件,这次默认为None。
capath是指定CA证书目录。
cadefault是指示是否使用默认的CA证书,如果设为True,则使用默认的CA证书。
context是ssl.SSLContext类型的对象,用来指定SSL设置。
2.1 使用示例
下面的示例代码演示了如何使用urllib库来获取一个web页面,然后将html内容打印出来:
import urllib.request, urllib.error, urllib.parse
response = urllib.request.urlopen('http://www.goubanjia.com/free/index.shtml')
html = response.read()
print(html.decode('utf-8'))
在这个例子中,我们可以看到以下几点:
导入urllib模块。
使用urllib.request.urlopen()方法打开一个url。
使用response.read()方法读取该url的html内容。
使用print()函数打印该html内容。
3. urllib库的异常处理
在使用urllib库时,可能会遇到一些网络错误或服务器错误等异常,并附带相应的异常信息。因此,正确的网络编程应该包括异常处理机制。urllib的异常处理模块urllib.error,提供了处理urllib产生的异常的一些函数和类。
urllib.error中常见的异常类有以下几种:
URLError:是urllib.request.urlopen()方法产生的异常基类。
HTTPError:是产生与 HTTP 请求相关的异常。
ContentTooShortError:继承HTTPError,当下载的文件长度不符时抛出的异常。
3.1 使用示例
下面的示例代码演示了urllib库的异常处理:
import urllib.request, urllib.error
try:
urllib.request.urlopen("http://www.123.com/")
except urllib.error.URLError as e:
print(e.reason)
上面的代码执行结果会输出一个异常,因为我们访问的是一个不存在的页面,输出结果为:
Error 404 Not Found
4.实例:爬取网页数据并保存至本地文件
下面的示例代码演示了如何使用urllib库来获取网页数据,并将其保存至本地文件:
import urllib.request, urllib.error, urllib.parse
def create_txt_file(url, file):
response = urllib.request.urlopen(url)
webContent = response.read()
with open(file, 'w') as output:
output.write(str(webContent))
print("文件已成功创建: ")
print(file)
create_txt_file("http://www.baidu.com", "output.txt")
在这个例子中,我们可以看到以下几点:
使用urllib.request.urlopen()方法打开一个url。
使用response.read()方法读取该url的html内容。
使用with open() as output语句,将html内容保存到本地文件中。
5. 总结
本文介绍了urllib库的使用方法,主要涵盖了urllib.request.urlopen方法、异常处理以及利用urllib库爬取网页数据并保存至本地文件的实例演示。希望本篇文章能给初学者一些帮助,学习Python爬虫开发方面的技能。