1、Urllib简介
Python urllib库用于操作网页URL,并对网页的内容进行抓取处理。
Python3 的urllib模块是 一堆可以处理URL的组件集合。
urllib
包 包含以下几个模块:
urllib.request
- 打开和读取 URL。
urllib.error
- 包含 urllib.request
抛出的异常。
urllib.parse
- 解析 URL。
2、简单使用实例
#使用urllib进行爬取首先需要导入urllib
import urllib.request
# 接着需要一个真实存在的url,例如百度,使用的是http协议
url= 'http://www.baidu.com/'
# 模拟浏览器向服务器发送请求,并接受服务器的响应
response = urllib.request.urlopen(url)
# 接着获取响应中的页面源码
# read返回字节形式的二进制数据
# 将二进制的数据转变为字符串,解码decode(编码格式)
content = response.read().decode('utf-8')
# 打印源码
print(content)
注意: http获取数据时信息齐全,https获取数据的信息有缺失,在确定网络地址后,一般采用http
补充知识点:
HTTP: 是互联网上应用最广泛的一种网络协议,是一个客户端和服务器请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少
HTTPS: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTP与HTTPS之间的区别:
HTTP协议传输的数据是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
主要区别如下:
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443.
- http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
具体的源码如下:
# -*- coding: utf-8 -*-
# @Time : 2022/9/2 15:48
# @Author:未晞~
# @FileName: demo1.py
# @Software: PyCharm
#使用urllib进行爬取首先需要导入urllib
import urllib.request
# 接着需要一个真实存在的url,例如百度,使用的是http协议
url= 'http://www.baidu.com/'
# 模拟浏览器向服务器发送请求,并接受服务器的响应
response = urllib.request.urlopen(url)
# 接着获取响应中的页面源码
# read返回字节形式的二进制数据
# 将二进制的数据转变为字符串,解码decode(编码格式)
content = response.read().decode('utf-8')
# 打印源码
print(content)
3、urllib的6个方法
首先向服务器发送请求,并接收响应
#使用urllib进行爬取首先需要导入urllib
import urllib.request
# 接着需要一个真实存在的url,例如百度,使用的是http协议
url= 'http://www.baidu.com/'
# 模拟浏览器向服务器发送请求,并接受服务器的响应
response = urllib.request.urlopen(url)
类型 HTTPResponse
可以使用type获取response类型
print(type(response))
# <class 'http.client.HTTPResponse'>
3.1、read()
使用read()可以按照字节读取相应的数据
print(response.read())
返回的是字节类型的,可以进行解码response.read().decode(‘utf-8’)
注意:读取一行decode用不了
结果如下:
3.2、readlines()
使用readlines()可以实现按行读取,但是不可以使用decode()
import urllib.request
url = 'http://www.baidu.com'
response = urllib.request.urlopen(url)
content = response.readlines()
print(content)
如果如下:
3.3、getcode()
使用getcode()获取响应的状态码(即HTTP常见响应状态码)
最为常见的是200和403,200代表请求成功,403一般是触发反爬策略被限制了IP。
print(response.getcode())
结果是200
3.4、geturl()
print(response.geturl())
3.5、getheaders()
使用getheaders()可以获取响应头信息
print(response.getheaders())
3.6、下载
调用urlretrieve(url,filename)
可以下载资源
# url下载路径 filename文件名
urllib.request.urlretrieve(url,'baidu.html')
自己会生成相应的文件展示出来