开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
urllib库使用
常用API
# 模拟浏览器向服务器发送请求
urllib.request.urlopen()
# 字节形式读取二进制
read()
# 读取一行
readline()
# 一行行读取,直至结束
readlines()
# 获取状态码
getcode()
# 获取url
geturl()
# 获取headers
getheaders()
# 请求网页、图片、视频
urllib.request.urlretrieve()
read()
以字节的形式读取所有源码
# 引入urllib库
import urllib.request
# 定义一个要访问的地址
url = 'http://www.baidu.com'
# 模拟浏览器发起请求,得到响应结果
response = urllib.request.urlopen(url)
# 获取响应中的页面源码并打印
html = response.read()
print(html)
从图中可以看出,我们能正常的获取到页面的源码了,但是read()函数是按字节的形式读取的,返回的结果我们并不能直观的看清都是些什么,因此,还需要针对结果做一个解码操作decode(编码格式)
html = response.read().decode('utf-8')
将字节进行编码转换,现在打印出来的结果就很直观了。
readline()
读取一行源码
html = response.readline().decode('utf-8')
readlines()
以一行行的方式读取全部源码
html = response.readlines().decode('utf-8')
读取到源码只会进行解码操作竟然报错了,说列表对象不能解码,我们来打印下使用
readlines()返回的类型到底是什么?
真的是列表,那么我们就需要对列表中的每一个元素都执行解码操作了
html = response.readlines()
for h in html:
print(h.decode('utf-8'))
getcode()
获取响应体的状态码
print(response.getcode())
当请求正常得到响应,会接收到一个200的状态码,http状态不单单只有200,还有更多的状态消息,感兴趣的小伙伴可以自行查看。
geturl()
获取访问地址
print(response.geturl())
getheaders()
获取响应体
print(response.getheaders())
urlretrieve()
下载资源
import urllib.request
url = 'http://www.baidu.com'
urllib.request.urlretrieve(url, 'baidu.html')
运行代码之后可以看到在当前目录中多了一个baidu.html文件,直接浏览器打开可看到与我们直接打开的百度页面是一模一样的。除了页面源码之外,还可以下载图片、视频等资源。