Python urlopen()和urlretrieve()用法解析

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并获取页面内容,或者下载网络文件到本地。同时,我们还学习了如何设置请求头信息、处理异常、关闭连接,以及显示下载进度和设置超时时间等技巧。

这些函数的灵活运用,可以为我们处理各种网页爬取和文件下载任务提供便利。对于爬虫、数据分析和网络编程等领域的开发人员来说,掌握这些函数的用法是必不可少的。

后端开发标签