1. urlopen()函数
urlopen()函数是Python中用于打开URL的内置函数。它可以用来从指定的URL获取页面内容,以便后续处理或分析。
1.1 打开URL
要使用urlopen()函数打开URL,只需要传入一个URL作为参数即可:
from urllib.request import urlopen
# 打开一个URL
response = urlopen("http://www.example.com")
# 获取页面内容
html = response.read()
# 打印页面内容
print(html)
上述代码使用urlopen()函数打开了一个URL,并通过response.read()方法获取了页面的内容。最后打印出了获取到的页面内容。
注意:urlopen()函数不仅可以打开普通的HTTP、HTTPS链接,还可以打开本地文件等。只要是有效的URL,都可以使用urlopen()函数打开。
1.2 设置请求头
urlopen()函数的第二个参数可以指定请求的头部信息。对于某些特殊的URL,可能需要设置一些额外的请求头部信息才能访问成功。
from urllib.request import urlopen
# 设置请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}
# 打开一个URL,并设置请求头
response = urlopen("http://www.example.com", headers=headers)
# 获取页面内容
html = response.read()
# 打印页面内容
print(html)
上述代码中,我们通过headers参数设置了请求头部信息,其中User-Agent字段指定了浏览器的信息。这样可以模拟浏览器发送请求,避免一些特殊的反爬虫机制。
1.3 处理异常
在使用urlopen()函数时,有可能会遇到一些异常。比如网络连接超时、URL不存在等。为了避免程序崩溃,我们需要进行异常处理。
from urllib.request import urlopen
from urllib.error import URLError
try:
response = urlopen("http://www.example.com")
html = response.read()
print(html)
except URLError as e:
print("URL打开失败!", e)
上述代码中,我们使用了try-except语句来捕获URLError异常。当URL无法正常打开时,会抛出这个异常,并打印出错误信息。
1.4 关闭连接
在使用urlopen()函数后,需要手动关闭连接。为了简化操作,可以使用with语句来自动关闭连接。
from urllib.request import urlopen
with urlopen("http://www.example.com") as response:
html = response.read()
print(html)
上述代码中,我们使用with语句打开URL,并自动关闭连接。这样可以确保在使用完成后,连接能够被正确关闭。
2. urlretrieve()函数
urlretrieve()函数也是Python中用于下载网络文件的内置函数。它可以将指定的URL下载到本地文件中。
2.1 下载文件
要使用urlretrieve()函数下载文件,只需要传入一个URL和一个文件路径作为参数即可:
from urllib.request import urlretrieve
# 下载文件
urlretrieve("http://www.example.com/image.jpg", "image.jpg")
上述代码中,我们使用urlretrieve()函数将指定URL的文件下载到本地,保存为文件名为image.jpg的文件。
注意:urlretrieve()函数会自动处理重定向,并且可以自动根据URL的后缀名确定文件的类型,从而设置Content-Type头部信息。
2.2 显示下载进度
urlretrieve()函数还可以显示下载进度,以便用户知道文件下载的进度情况。
from urllib.request import urlretrieve
def report_hook(block_num, block_size, total_size):
percent = 100.0 * block_num * block_size / total_size
print("下载进度:%.2f%%" % percent)
# 下载文件,并显示下载进度
urlretrieve("http://www.example.com/image.jpg", "image.jpg", reporthook=report_hook)
上述代码中,我们定义了一个report_hook()函数来处理下载进度,然后将这个函数传给urlretrieve()函数的reporthook参数。在下载过程中,每下载一个数据块,都会调用这个函数来更新下载进度。
2.3 设置超时
有时候下载一个文件可能会比较耗时,为了避免程序长时间等待,可以设置一个超时时间。
from urllib.request import urlretrieve
# 设置超时时间为5秒
urlretrieve("http://www.example.com/image.jpg", "image.jpg", timeout=5)
上述代码中,我们通过timeout参数设置了下载的超时时间为5秒。如果在指定的时间内没有完成下载,就会抛出一个超时错误。
总结
本文介绍了Python中的urlopen()函数和urlretrieve()函数的用法。通过使用这两个函数,我们可以方便地打开URL并获取页面内容,或者下载网络文件到本地。同时,我们还学习了如何设置请求头信息、处理异常、关闭连接,以及显示下载进度和设置超时时间等技巧。
这些函数的灵活运用,可以为我们处理各种网页爬取和文件下载任务提供便利。对于爬虫、数据分析和网络编程等领域的开发人员来说,掌握这些函数的用法是必不可少的。