一. 爬虫的步骤
(1)浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
(2)解析出IP地址后,根据IP地址和默认端口,和服务器建立TCP连接
(3)浏览器发出读取文件的http请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器
(4)服务器对浏览器请求做出响应,并把对应的html文件发送给浏览器
(5)释放TCP连接
(6)浏览器将该HMTL渲染并显示内容
二. urllib库简介
(1)urllib库是python的标准库,提供了一系列用于操作url的功能,是模拟浏览器发送请求的库
(2)Urllib中的模块:
1.Urllib.request:用于打开和读取url
2.urllib.error:包含了request模块中各种错误的模块
3.urllib.parse:用于解析url
4.urllib.robotparse:解析网站robots.txt文件
三. urllib.request模块
1简介:urllib库中HTTP请求模块
2.常用方法:
1)urlopen():向服务器发送请求的方法,返回服务器的响应信息(response)
2)response对象方法:
(1)read():读取二进制格式网页内容
(2)geturl():获取url
(3)getheaders:获取响应头内容
(4)getcode():获取响应状态码
四. urllib实现数据采集的步骤
1.导入urllib.request模块
import urllib.request
2.使用urlopen()方法向服务器发送请求
response = urllib.request.urliopen(url)
3.获取响应数据
html = response .read().decode(网站编码)
五. urllib.parse模块
1.简介:urllib库中对url进行解析的模块
补充说明:url只能由特定的字符组成,字母/数字/下划线,如果出现其它字符,如$/空格/中文等则需对其进行编码
urllib.parse模块 : https://blog.csdn.net/qq_36148847/article/details/79153738
2. urlparse(url) :对url进行解析
3.url编码函数——quote与unquote:
1)quote():对url进行转码,将中文转化为%xxx的格式。
unquote():将url中%xxx格式转换为中文
2)urlencode(字典类型):实现url字符串拼接并对非法字符转码
六. urllib.error模块
1.简介:urllib.error可以接收有urllib.request产生的异常。
2.对应的类:
URLError/HTTPError
URLError是OSError的一个子类,
HTTPError是URLError的一个子类
3.引起URLError常见问题:
1)网络故障导致网络不通
2)服务器连接失败
3)找不到指定服务器,如:url错误
4.模拟URLError举例:
1)url错误——HTTP Error 403: Forbidden
2)断网测试——urlopen error [Error 11001] getaddrinfo failed
注意:当URLError与HTTPError同时捕获异常时,必须将HTTPError写在上面,如果URLError放在前面,出现HTTP异常会先响应URLError,这样HTTPError就捕获不到错误信息了
七. urllib库发送get请求
get请求:在url中显示关键词及对应的数据时,urllib向服务器发送请求使用get方式获取数据。
请求步骤:
1.对url进行解析并按照?进行分割
2.定义字典,将url中?后的属性名和属性值按照字典键值对格式存储在字典中
3.通过urllib中parse模块的urlencode()方法对字典数据进行解析
4.将url与解析后的数据进行拼接生产新的url
5.使用新url向服务器发送请求。
八. urllib库发送post请求
post请求:url中没有显式给出请求参数和参数值,需要使用抓包工具查看请求参数或在network中查看参数详情
请求步骤:
1.在network中的XHR中查看请求方式为post的headers中的Form Data参数。
2.将上面的参数以字典格式存储
3.使用urllib.parse解析库对字典中的数据进行解析
4.向服务器发送请求,将3中解析结果作为urlopen()中data参数的参数值传入。
5.读取网页数据