Python爬虫入门 ~ 爬虫相关概念(二)

99 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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)

image.png

从图中可以看出,我们能正常的获取到页面的源码了,但是read()函数是按字节的形式读取的,返回的结果我们并不能直观的看清都是些什么,因此,还需要针对结果做一个解码操作decode(编码格式)

html = response.read().decode('utf-8')

image.png 将字节进行编码转换,现在打印出来的结果就很直观了。

readline()

读取一行源码

html = response.readline().decode('utf-8')

image.png

readlines()

以一行行的方式读取全部源码

html = response.readlines().decode('utf-8')

image.png 读取到源码只会进行解码操作竟然报错了,说列表对象不能解码,我们来打印下使用readlines()返回的类型到底是什么?

image.png

真的是列表,那么我们就需要对列表中的每一个元素都执行解码操作了

html = response.readlines()
for h in html:
    print(h.decode('utf-8'))

image.png

getcode()

获取响应体的状态码

print(response.getcode())

当请求正常得到响应,会接收到一个200的状态码,http状态不单单只有200,还有更多的状态消息,感兴趣的小伙伴可以自行查看。 image.png

geturl()

获取访问地址

print(response.geturl())

image.png

getheaders()

获取响应体

print(response.getheaders())

image.png

urlretrieve()

下载资源

import urllib.request

url = 'http://www.baidu.com'

urllib.request.urlretrieve(url, 'baidu.html')

运行代码之后可以看到在当前目录中多了一个baidu.html文件,直接浏览器打开可看到与我们直接打开的百度页面是一模一样的。除了页面源码之外,还可以下载图片、视频等资源。 image.png

image.png

image.png