URI——统一资源标志符
URL——统一资源定位符
URN——统一资源名称
HTTP全称Hyper Text Transfer Protocol,即超文本传输协议。HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议。
HTTPS全称Text Transfer Protocol over Secure Socket Layer-HTTP的安全版,即在HTTP下加上SSL层,简称为HTTPS。
HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的。
某些网站虽然使用了HTTPS协议,但还是会被浏览器提示不安全,例如在Chrome浏览器里面打开12306,链接为:https://www.12306.cn/,这时候浏览器就会提示"你的连接不是私密链接"这样的警告.这是因为12306的CA证书是中国铁道部自行签发的,而这个证书是不被CA机构信任的,所以这里证书验证就不会通过而发出警告,但是实际上它的数据传输依旧是通过SSL加密的,如果要爬取这样的站点,就需要设置忽略证书的选项,否则就会提示SSL链接错误.
我们在浏览器输入一个URL,回车之后便会在浏览器中观察到页面内容.实际上,这个过程是浏览器想网站所在的服务器发送了一个请求**,网站服务器接收到该请求后进行处理和解析,然后返回对应的响应**,接着传送回了浏览器.响应里包含了页面的源代码等内容,浏览器再对其解析,便将网页呈现了出来.
打开浏览器,右击并选择**"检查"项,即可打开开发者模式**
查看network监听组件-显示访问当前请求网页时发生的所有网页请求和响应
network页面下放有很多条目,其中一个条目就代表一次发送请求和接收响应的过程,其中各列的含义如下:
首先是General部分,Request URL为请求的URL,Request Method为请求的方法,Status Code为响应状态码,Remove Address为远程服务器的地址和端口,Referrer Policy为Referrer判别策略
接下来是有:Request Headers和Response Headers,分别表示请求头和响应头:
请求包含四部分:
常见有两种:
两者的区别:
GET
请求中的参数包含在URL里面**,数据可以在URL中看到**,而POST
请求的URL不包含这些数据,数据通过表单形式传输,包含在请求体中
GET
请求提交的数据最多只有1024字节,而POST
方法没有限制
一般来说,因为
GET
的数据可以在URL中看到,所以包含敏感信息时,最好使用POST
请求;上传文件时,由于文件内容比较大,也会选用POST
方式.
包含其它方法的表格如下:
方法 | 描述 |
---|---|
GET | 请求页面,并返回页面内容 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容 ,用于获取报头 |
POST | 大多数用于提交表单或上传文件,数据包含在请求体中 |
PUT | 从客户端向服务器传送的数据取代指定文档中的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | 把服务器当做跳板,让服务器代替客户端访问其它网页 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试和诊断 |
请求的网址,即统一资源定位符,它可以唯一确定我们想请求的资源.
用于说明服务器要使用的附加信息,比较重要的信息有Cookie
,Referer
,User-Agent
等:
Accept:请求报头域,用于指定客户端可接收哪些类型的信息
Axxept-Language:指定客户端可接收的语言类型
Accept-Encoding:指定客户端可接收的内容编码
Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置.请求必须包含此内容
Cookie:常用复数形式Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据.主要功能:维持当前访问会话.
Referer:用于标识这个请求时是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如来源统计,防盗链处理等
User-Agent:简称UA,一个特殊的字符串头,可以使服务器识别用户使用的操作系统及版本,浏览器及版本等信息.在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫
Content-Type:也叫互联网媒体类型或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息
请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头
请求体一般承载的是POST请求中的表单数据,而对GET,请求体为空
Content-Type | 提交数据的方式 |
---|---|
application/x-www-form-urlencoded | 表单数据 |
multipart/form-data | 表单文件上传 |
application/json | 序列化JSON数据 |
text/xml | XML数据 |
由服务端返回给客户端,可以分成3部分:响应状态码,响应头和响应体.
响应状态码
常见的响应状态码:(其它的遇到再查)
状态码 | 说明 | 详情 |
---|---|---|
200 | 成功 | 请求者应当继续提出请求.服务器已收到请求的一部分, 正在等待剩余部分 |
404 | 未找到 | 服务器找不到找不到请求的网页 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
响应头包含了服务器对请求的应答信息,如Content-Type
,Server
,Set-Cookie
,一些常用的头信息:
最重要的当属响应体的内容.响应的正文部分都在响应体中,比如请求网页是,它的响应体就是网页的HTML代码;请求一张图片是,它的响应体就是图片的二进制数据.做爬虫请求网页后,需要解析的内容就是响应体
网页三大部分:
W3C文档对象(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容,结构和样式.
在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树.
根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点:
HTML DOM将HTML文档视为树结构,这种结构被成为节点树:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yqolHPyH-1618848321155)(D:\图片\微信截图_20210324172722.png)]
节点树中的节点彼此拥有层级关系.我们常用父,子,兄弟等术语描述这些关系.上下级为父与子关系,同级为兄弟关系.顶端节点称为根(root)
在CSS中,我们使用CSS选择器来定位节点.
常用选择的3种方式:
#
开头代表选择id,其后紧跟id
的名称.
开头代表选择class,其后紧跟class
的名称标签名
筛选,例如选择二级标题,直接用h2
即可CSS还支持嵌套选择,如:
#container .wrapper p代表先选择id为container的节点,然后选中其内部的class为wrapper的节点,然后再进一步选择其内部的p节点.另外,如果不加空格,则表示并列关系.
CSS的部分语法规则:
选择器 | 例子 | 例子描述 |
---|---|---|
.class | .intro | 选择class="intro"的所有节点 |
#id | #firstname | 选择id="firstname"的所有节点 |
* | * | 选择所有节点 |
element | p | 选择所有p节点 |
element,element | div,p | 选择所有div节点和所有p节点 |
element element | div p | 选择div节点内部的所有p节点 |
element>element | div>p | 选择父节点为div节点的所有p节点 |
element+element | div+p | 选择紧接再div节点之后的所有p节点 |
概述:爬虫就是获取网页并提取和保存信息的自动化程序
使用urlib,requests等库实现HTTP请求操作,请求和响应都可以利用类库提供的数据结构来表示,得到响应之后只需要解析数据结构中的Body部分
通用方法:采用正则表达式提取
其它方法:利用网页结构提取网页信息的库:Beautiful Soup,pyquery,lxml等
可以保存至:
代替人工完成爬取工作的自动化程序
处理所爬取的源代码,提高其与网页源代码的相似度.方法:
无状态—HTTP的一个特点—指的是HTTP协议对事务处理是没有记忆能力的,也就是说服务器不知道客户端是什么状态.即服务器不会记录请求和响应前后状态的变化,也就是缺少状态记录.这意味着,第一次处理过一次前面的信息后不会进行保存,第二次使用时,如若需要使用前面的信息是,需要再次上传并处理.无疑,这太浪费资源了.所以,用于保持HTTP链接状态的Cookies和会话出现了.
会话在服务端,即网站的服务器,用于保存用户的会话信息;
Cookies在客户端,有了Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后再判断一年用户是否是登录状态,然后返回对应的响应.
会话意指有始有终的一系列动作/消息.
在Web中,会话对象用于存储特定用户会话所需的属性及配置信息.
Cookies指某些网站为了辨别用户身份,进行会话跟踪而存储在用户本地终端上的数据.
会话维持: 在成功登录某个网站时,服务器会告诉客户端设置哪些Cookies信息,在后续访问页面时,客户端会把Cookies发送到服务器,服务器再找到对应的会话加以判断.如果会话中某某些设置登录状态的变量是有效的,那就证明用户处于登录状态,此时返回登录之后才可以查看的网页内容.反之,如果Cookies是无效的,或者会话已经过期,我们将不能再访问页面.
属性结构(Cookies的属性):
会话Cookie | 把Cookie放进浏览器内存里,浏览器关闭后,该Cookie失效 |
---|---|
持久Cookie | 把Cookie放在客户端的硬盘中,下次还可以继续使用,用于长期保持用户登录状态 |
浏览器关闭不会导致会话.而正因为如此,服务器需要为会话设置一个失效时间,当距离客户端上一次使用会话的时间超过这个失效时间时,服务器就可以认为客户端已经停止活动.才会把会话删除以节省存储空间.
代理实际上指的就是代理服务器,它的功能是代理网络用户去取得网络信息.即,网络信息的中转站.
本来是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZI02W81u-1618848321156)(D:\图片\微信截图_20210324232920.png)]
添加代理服务器后:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7nudgyi8-1618848321157)(D:\图片\微信截图_20210324233030.png)]
在改进后,我们仍然可以正常访问网页,但Web服务器识别出的真实IP就再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理.
对于爬虫来说,要是爬虫爬取速度过快,在爬取过程中可能遇到同一个IP访问过于频繁的问题,此时网站会让我们输入验证码或者直接封锁IP,无疑,为爬虫带来了极大的不便.
使用代理隐藏真实IP,让服务器误以为是代理服务器自己请求自己.这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果.
FTP代理服务器: 主要用于访问FTP服务器,一般有上传,下载以及缓存功能,端口一般为21,2121等
HTTP代理服务器: 主要用于访问网页,一般有内容过滤和缓存功能,端口一般为80,8080,3128等
SSL/TLS代理:主要用于访问加密网站,一般有SSl或TLS加密功能(最高支持128位加密强度),端口一般为443
RTSP代理: 主要用于访问Real流媒体服务器,一般有缓存功能,端口一般为554
Telnet代理: 主要用于telnet远程控制(黑客入侵计算机是常用于隐藏身份),端口一般为23
POP3/SMTP代理:主要用于POP3/SMTP方式收发邮件,一般有缓存功能,端口一般为110/25
SOCKS代理: 只是单纯传递数据包,不关心具体协议和用法,所以速度快很多,一般有缓存功能,端口一般为1080.SOCKS代理协议又分为SOCKS4和SOCKS5,前者只支持TCP,而后者支持TCP和UDP,还支持各种身份验证机制,服务器端域名解析等.