栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

一篇万字博文带你入坑爬虫这条不归路

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一篇万字博文带你入坑爬虫这条不归路

在网页的右键检查里Network- Name- Request Headers view parsed下 的Connection:keep-alive保持常连接 就不用频繁的三次握手和四次挥手

浏览器获取的内容 elements的内容 包含 url地址对应的响应 js css pictures 爬虫会获取 url地址对应的响应 爬虫获取的内容和elements的内容不一样 进行数据提取的时候 需要根据url地址对应的响应为准 3 URL 浏览器搜索框里的内容

 发送http请求时 通过url对网络资源进行定位。

 URL Uniform Resource Locator 中文叫统一资源定位符。是用来标识某一处资源的地址。也即是我们常说的网址。以下面这个URL为例 介绍下普通URL的各部分组成
协议 域名(端口默认80) 路径 参数

注意
 1.http协议的端口号默认为80可以不写 https协议的端口号默认为443可以不写 注意 域名可以确定是哪一台电脑 而端口号是为了确定是那台电脑的哪一个应用
 2.域名通常是IP地址的映射 端口号通常是默认的就不写。我们平常搜索时 比如进入百度 https://www.baidu.com/ 这里的https协议的默认端口号为443 就没写哦

4 HTTP请求格式

  客户端 也就是我们用户 发送一个HTTP请求到服务器的请求消息包括以下部分 请求行 请求头 空行和请求数据。

  一般格式

注意 上图中请求行的URL是指 2 URL中的路径

1.请求方法 1 分类

 根据http标准 http请求可以使用多种请求方法。

 五种请求方法 OPTIONS PUT DELETE TRACE和CONNECT方法。

2 分类讲解

常用方法 是 GET和POST。

GET
1.主要是负责从服务器获取数据
2.URL中添加请求参数,显示在地址栏
3.请求字符串限制 1024个字节
比POST更加高效和方便。

POST
1.主要负责向服务器提交数据
2.没有大小限制 但一般是2M
比’GET’传递数据量大,安全性高。

3

2.请求头

3.HTTP请求正文 请求数据

 请求正文通常是使用POST方法进行发送的数据 GET方法是没有请求正文的。

 请求正文跟上面的消息报头由一个空行隔开。

来个承上启下 既然现在请求格式已经OK了 也就是说我们可以让服务端听懂我们说的话了 下面要做的就是让我们能听懂服务端给我们说的话了。 6 HTTP响应格式

 HTTP响应也由四个部分组成 分别是 状态行 响应行 、消息报头、空行和响应正文。

 一般格式

1.HTTP响应状态码 这里面就有熟悉的404哦

 当客户端向服务端发起一次请求后 服务端在返回的响应头中会包含一个HTTP状态码 我们在进行爬虫实战的时候可以通过判断此状态码得知目前的爬虫代码是否OK 。

 HTTP的状态码是由三位数字来表示的 由第一位数字来表示状态码的类型 一般来说有五种类型

注意 重定向就相当于一个中介转接。 所有HTTP响应状态码详解点我查看

2.HTTP响应报头

7 总结 1.HTTP流程总结

2.HTTP协议的特点

HTTP三点注意事项

HTTP是无连接的 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求 并收到客户的应答后 即断开连接。采用这种方式可以节省传输时间。

HTTP是媒体独立的 这意味着 只要客户端和服务器知道如何处理的数据内容 任何类型的数据都可以通过HTTP发送。

HTTP是无状态的 HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息 则它必须重传 这样可能导致每次连接传送的数据量增大。另一方面 在服务器不需要先前信息时它的应答就较快。

无状态HTTP官方详解 
 HTTP的无状态是指HTTP协议对事务处理是没有记忆能力的 也就是说服务器不知道客户端是什么状态。当我
们向服务器发送请求后 服务器解析此请求 然后返回对应的响应 服务器负责完成这个过程 而且这个过程是完全
独立的 服务器不会记录前后状态的变化 也就是缺少状态记录。这意味着如果后续需要处理前面的信息 则必须重
传 这导致需要额外传递一些前面的重复请求 才能获取后续响应 然而这种效果显然不是我们想要的。为了保持前
后状态 我们肯定不能将前面的请求全部重传一次 这太浪费资源了 对于这种需要用户登录的页面来说 更是棘手。
 这时两个用于保持HTTP连接状态的技术就出现了 它们分别是会话和cookies。下面会介绍到哦 
注意 无状态的意思是 比如你再一个网页中输入了账号密码登录了QQ空间 但是由于HTTP是无状态的 所以你再在QQ空间里登录QQ邮箱需要再输入一次账号和密码 登录的状态是没有被记忆的。但是可以利用会话技术解决。 3.HTTPS协议

 加强版的HTTP 公鸡中的战斗机一枚
 HTTPS 全称 Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure 超文本传输安全协议 是以安全为目标的HTTP通道 简单讲是HTTP的安全版

 http协议是基于tcp/ip协议的 而https是在http协议的基础之上 再加了一层SSL/TLS协议 数据在传输过程中是加密的。

 注意 HTTPS协议的默认端口是443。

http因为是明文传输 而https是密文传输 所以HTTPS比http更安全 
但是性能低 因为解密需要消耗时间 
3.解决http无状态 之 会话技术

 http是无状态的 那服务端怎么区分同一个用户的连续请求呢 这就用到了会话技术 cookie和session。

1 cookie

cookie有时也用其复数形式 cookies。
  指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据 通常经过加密 。最新的规范是 RFC6265 。

cookie可以理解为一个凭证

1.实际是由服务器发给客户端的特殊信息 2.这些信息以文本文件的方式存放在客户端 3.客户端每次向服务器发送请求的时候都会带上这些特殊的信息。4.服务器在接收到cookie以后 会验证cookie的信息 以此来辨别用户的身份。

爬虫中为什么要使用cookie?

带上cookie的好处
①能够访问登录页面。
②正常的浏览器在请求服务器的时候肯定会带上cookie 第一次请求除外 所以对方服务器有可能会通过是否携带cookie来判断我们是否是一个爬虫 对应的能够起到一定的反爬作用。带上cookie的坏处
①一套cookie往往对应的是一个用户的信息 请求太频繁有更大的可能性被对方识别为爬虫。
②一般使用多账号解决。 2 Session

 Session 中文经常翻译为会话 其本来的含义是指有始有终的一系列动作/消息 比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。这个词在各个领域都有在使用。

 而我们web 爬虫领域 一般使用的是其本义 一个浏览器窗口从打开到关闭这个期间。

  Session的目的则是 在一个客户从打开浏览器到关闭浏览器这个期间内 发起的所有请求都可以被识别为同一个用户。 而实现的方式则是 在一个客户打开浏览器开始访问网站的时候 会生成一个cookie SessionID 注意 SessionID包含于cookie中 这个ID每次的访问都会带上 而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此session是基于cookie的

 Session与cookie相反 Session是存储在服务器上的数据 只由客户端传上来的SessionId来进行判定 所以相对于cookie Session的安全性更高。

 一般SessionID会在浏览器被关闭时丢弃 或者服务器会验证Session的活跃程度 例如30分钟某一个SessionID都没有活跃 那么也会被识别为失效。

 session的作用——用来实现客户端和服务的的会话保持
   会话 状态 保持 ①保存cookie ② 实现和服务端的长连接。

3 cookie和session的区别 cookie数据存放在客户的浏览器上 session数据放在服务器上 cookie不是很安全 别人可以分析存放在本地的cookie并进行cookie欺骗 session会在一定时间内保存在服务器上 当访问增多 会比较占用服务器的性能 单个cookie保存的数据不能超过4k 很多浏览器都限制一个站点最多保存20个cookie。 4 来个图理解理解那么枯燥的文字

用户首次登录时
 会在服务器生成一个session表 里面的key是hash生成的数据 value是一系列信息。
同时在客户端本地生成一个文本文件cookie 这里面包含sessionid 而这个sessionid的值为服务器中的hash形式的key。

用户再次登录时
 会自动携带sessionid及其值 这个值与服务器里的hash形式的key比较 判断用户是否曾登录成功 如果成功 则获取用户登录的数据 然后返回给用户请求的界面。

5 实操一波看看cookies的属性结构

以QQ空间为例

  F12打开浏览器开发者工具 然后按如图步骤即为cookies 可以看到有很多条目 其中每个条目可以称为cookie。

属性名属性值讲解Name该cookie的名称。一旦创建 无法修改 Value该cookie的值。如果值为Unicode字符 需要为字符编码 如果值为二进制数据 则需要使用base64编码。Domain可以访问该cookie的域名。Max Age该cookie失效的时间 单位为S 通常和Expires一起使用 通过它可以计算出其有效时间。Max Age如果为正数 则该cookie在Max Age秒后失效 如果为负数 则关闭浏览器时失效 浏览器也不会以任何形式保存该cookie。Path该cookie的使用路径。如果设置为/path/,则只有路径为/path/的页面可以访问该cookie 如果设置为/ 则本域名下的所有页面都可以访问该cookie。Size此cookie的大小。HTTP字段cookie的httponly属性。若此属性为true 则只有在HTTP头中会带有此cookie 的信息 而不能通过document.cookie来访问此cookie。Secure该cookie是否仅被使用安全协议传输。安全协议有HTTPS和SSL等 在网络上传输数据之前先将数据加密。默认为false。 4.爬虫实战 利用socket下载一张图片 1 socket学习

socket国外翻译为插座 同时 由于其具备了“套接”和“字”的概念 所以又称为套接字。

知识补给站 混个眼熟就行了 
Socket是一种进程间通信机制 提供一种供应用程序
访问通信协议的操作系统调用 使得网络读写数据
和读写本地文件一样容易;Socket是一序列的“指令” ;
已经具备了“套接” 建立网络通讯或进程间通讯 和“字” 可交互的有序指令串 的概念。

①使用socket简单建造一个服务端 点我观看另一篇进阶版搭建的TCP服务器端文章
import socket
# 服务器对象
server socket.socket()
等同于 server socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.AF_INET 使用IPV4 
socket.SOCK_STREAM 创建一个socket套接字。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号