用Python写爬虫之前你需要对这些有简单的了解 = ̄ω ̄= Python爬虫

通用爬虫与聚焦爬虫

根据使用场景,爬虫可以划分为通用爬虫与聚焦爬虫两类

通用爬虫

通用爬虫又可以称之为搜索引擎抓取系统,是谷歌、百度、必应的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。

工作原理

  1. 首先选取一部分的种子URL,将这些URL放入待抓取的URL队列;
  2. 取出待抓取的URL,解析DNS得到主机IP,访问IP并且保存获得的网页,然后将已经保存的URL放入完成抓取的网站的队列中;
  3. 将保存的页面进行分析,寻找是否有其他URL,并将找到的URL放入待抓取的队列中。
    通用爬虫会一直重复上述过程。

搜索引擎获得新网站的方法

  1. 根据上述方法,浏览器获得新连接的方法可以为在其他网站上设置新的网站外链。(前提是设置外链的网站在搜索引擎爬取范围内)
  2. 主动向搜索引擎提交网站。百度链接提交地址
  3. 如果你的网站使用的DNS与相关搜索引擎有合作,那么新网站域名将会被迅速抓取。

Robots协议

Robots协议是爬虫协议,全程“网络爬虫排除标准”(Robots Exclusion Protocol)主要告诉爬虫,哪些页面可以抓,哪些页面不允许抓取。不过这个页面实际是一种君子协定,并非硬性要求,所以聚焦爬虫大多会无视此协议。 淘宝的爬虫协议 腾讯的爬虫协议

聚焦爬虫

虽然通用爬虫能爬取的数据量巨大,并且较为全面,但大多数时候通用爬虫爬取的数据对我们来说充满了重复且无用的信息。而聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。可以省去我们大量筛选信息的时间。

工作原理

  1. 指定需要爬取页面的URL队列
  2. 访问URL队列所用URL,保存数据
  3. 提取所需数据
  4. 将数据入库
    在这里插入图片描述

HTTP与HTTPS协议

HTTP(HyperText Transfer Protocol, 超文本传输协议):发布和接收HTML页面的方法。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, 安全套接字层上的超文本传输协议): 增加了安全套阶层的安全版HTTP。
SSL(Secure Socket Layer 安全套阶层):主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。
HTTP默认端口:80
HTTPS默认端口: 443

HTTP的请求与响应

HTTP通信分为两部分:客户端请求消息 与 服务器响应消息

  1. 用户从URL地址栏发出HTTP请求。(HTTP请求常用请求分为“Get”,“Post”两种方法)。
  2. 发送请求(Request)到指定服务器后,服务器有回应(Response)文件对象发送会给浏览器。
  3. 浏览器会分析回应(Response)文件中的HTML,如果其中发现引用了其他文件(比如图片,css,js)等文件。浏览器就会重复第二步操作。
  4. 当所用文件都下载成功后,网页会根据HTML语法结构,完整的显示出来。

URL

URL:统一资源定位符。浏览器顶部显示网址的地方即是一种URL,URL主要用于完整的描述其他资源地址的一种标识符。(相当于你所在的详细住址信息)
基本格式:
scheme://host[:port#]/path/…/[?query-string][#anchor] 其中[]中的内容为选填

  • scheme:协议(例如:http,http,ftp)
  • host: 服务器的IP地址或者域名
  • port#: 服务器的端口(不填写会默认为协议默认端口,比如说http的网站默认为80端口,https默认为443)
  • path:访问资源的路径
  • query-string:参数,发送给http服务器的数据(一般get请求的数据就在此发送)
  • anchor: 锚(跳转到网页指定锚点位置)

例如:https://xunmi.blog.csdn.net:443/article/details/103740622#propertysetter_233
其中https为协议,xunmi.blog.csdn.net为服务器域名,443是端口号,article/details/103740622为访问路径,propertysetter_233为锚。

客户端发送请求

URL只是用于标识资源的位置,而HTTP是用来提交和获取资源的,服务器接收我们客户端发送的请求也并非只是我们在URL输入的那种形式。
在这里插入图片描述
在控制台中,我们可以在网络中看到浏览器发送给服务器的具体请求内容。
在这里插入图片描述

请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法

  • HTTP09:只有基本的文本GET功能。
  • HTTP1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:GET,POST和HEAD方法。
  • HTTP1.1:在1.0基础上进行更新,新增了五种请求方法:OPTIONS,PUT, DELETE, TRACE和 CONNECT方法。
  • HTTP2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为:method、:scheme、host、:path这些键值对。
序号 ⽅法 描述
1 GET 请求指定的⻚⾯信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,⽤于获取报头
3 POST 向指定资源提交数据进⾏处理请求(例如提交表单或者上传⽂件),数据被包含在请求体中。POST请求可能会导致新的资源的建⽴和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的⽂档的内容。
5 DELETE 请求服务器删除指定的⻚⾯。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道⽅式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要⽤于测试或诊断。

常用请求方法

在众多请求方法中,最为常用的请求方法为GET与POST两种。

  1. GET是从服务器上获取数据,GET请求参数都会显示在URL中是URL的一部分,HTTP服务器根据URL中的参数来产生相应内容
  2. POST是向服务器传送数据,消息长度没有限制.而且以隐式的方式进行发送,通常向HTTP服务器提交量比较大的数据(比如请求中包含多重参数或者文件上传)因为POST方法隐式的方式,一般比较私密的信息(用户名,密码)也是通过POST进行发送。POST发送的请求内容也是可以通过控制台进行查看
    在这里插入图片描述

客户端常用的请求头

Host(主机和端口号)

Host: 对应网络URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。

Connection(链接类型)

Connection: 表示客户端与服务器链接类型

  1. 在HTTP/1.1之后客户端会自动发送一个包含Connection:keep-alive的请求(keep-alive用于服务器和客户端保持连接特性)。
  2. 服务器在接收到Connection:keep-alive请求后根据是否支持keep-alive进行回复。如果回复为Connection:keep-alive则代表服务器支持并且开始和客户端保持连接,如果服务器不支持keep-alive,则会返回Connection:close并且和客户端关闭连接。
  3. 如果客户端收到Connection:keep-alive响应,则向同一个连接发送下一个请求,直到一方主动关闭连接

Upgrade-Insecure-Requests (升级为HTTPS请求)

当访问一下http协议的网站时浏览器会在请求头中自动加入此请求,意思是在加载http资源时自动替换成https请求
在这里插入图片描述

User-Agent(客户端信息)

此项信息对爬虫技术至关重要,他像服务器中发送你正在使用的系统与版本、浏览器与版本等信息。在使用爬虫的时候,我们就要通过修改此处信息来将我们自己伪装成普通浏览器进行访问

Accept(传输文件类型)

Accept:指浏览器或其他客户端可以接受的MIME(Multipurpose InternetMail Extensions(多⽤途互联⽹邮件扩展))⽂件类型,服务器可以根据它判断并返回适当的⽂件格式。
Accept: / :表示什么都可以接收。
Accept:image/gif :表明客户端希望接受GIF图像格式的资源。
Accept:text/html :表明客户端希望接受html⽂本。
Accept: text/html, application/xhtml+xml;q=0.9,image/*;q=0.8 :表示浏览器⽀持的 MIME 类型分别是 html⽂本、xhtml和xml⽂档、所有的图像格式资源。

Referer (⻚⾯跳转处)

Referer:表明产⽣请求的⽹⻚来⾃于哪个URL,⽤户是从该 Referer⻚⾯访问到当前请求的⻚⾯。这个属性可以⽤来跟踪Web请求来⾃哪个⻚⾯,是从什么⽹站来的等。

Accept-Encoding(⽂件编解码格式)

Accept-Encoding:指出浏览器可以接受的编码⽅式。编码⽅式不同于⽂件格式,它是为了压缩⽂件并加速⽂件传递速度。浏览器在接收到Web响应之后先解码,然后再检查⽂件格式,许多情形下这可以减少⼤量的下载时间。

Accept-Language(语⾔种类)

Accept-Langeuage:指出浏览器可以接受的语⾔种类,如en或en-us指英语,zh或者zh-cn指简体中⽂,zh-TW与zh-HK为台湾和香港的繁体中文,当服务器能够提供⼀种以上的语⾔版本时要⽤到。语言之后的q参数可以理解为接受程度,q值越大就代表为越希望使用的语言,如果为1,即为只接受使用此语言,如果是0代表不接受这种语言
在这里插入图片描述

Accept-Charset(字符编码)

Accept-Charset:指出浏览器可以接受的字符编码。

Cookie

Cookie:浏览器⽤这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的⼩型数据体,它可以记载和服务器相关的⽤户信息(大部分网站的免密登陆就是通过Cookie将登陆信息存放到本地来实现的,所以Cookie并不安全)

Content-Type (POST数据类型)

Content-Type:POST请求⾥⽤来表示的内容类型。

服务端HTTP响应

HTTP响应也由四个部分组成,分别是: 状态⾏ 、 消息报头 、 空⾏ 、 响应正⽂
在这里插入图片描述
在这里插入图片描述

常⽤的响应头

Cache-Control(缓存控制)

如果我们在服务器的响应头里看见了Cache-Control:must-revalidate, no-cache, private这个值告诉客户端,服务端不希望客户端缓存资源,在下次请求资源时,必须要从新请求服务器,不能从缓存副本中获取资源。

Connection(链接类型)

根据客户端的Connection来进行回应。如果是这个字段作为回应客户端的Connection:keep-alive,则代表告诉客户端服务器的tcp连接也是⼀个⻓连接,客户端可以继续使⽤这个tcp连接发送http请求,如果服务器不支持keep-alive,则会返回Connection:close并且和客户端关闭连接。

Content-Encoding(编码方式)

如果是Content-Encoding:gzip则为告诉客户端,服务端发送的资源是采⽤gzip编码的,客户端看到这个信息后,应该采⽤gzip对资源进⾏解码。但前提是浏览器支持此类编码方式,浏览器的支持的编码方式可以在请求头Accept-Encoding处查看。

Content-Type(内容类型)

告诉客户端,资源⽂件的类型,还有字符编码。例Content-Type:text/html;charset=UTF-8:客户端通过utf-8对资源进⾏解码,然后对资源进⾏html解析。通常我们会看到有些⽹站是乱码的,往往就是服务器端没有返回正确的编码。

Date(服务器时间)

这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。http协议中发送的时间都是GMT的,这主要是解决在互联⽹上,不同时区在相互请求资源的时候,时间混乱问题。

响应状态码

响应状态代码有三位数字组成,第⼀个数字定义了响应的类别,且有五种可能取值。

常⻅状态码

  • 100~199 :表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
  • 200~299 :表示服务器成功接收请求并已完成整个处理过程。常⽤200(OK 请求成功)。
  • 300~399 :为完成请求,客户需进⼀步细化请求。例如:请求的资源已经移动⼀个新地址、常⽤302(所请求的⻚⾯已经临时转移⾄新的url)、307和304(使⽤缓存资源)。
  • 400~499 :客户端的请求有错误,常⽤404(服务器⽆法找到被请求的⻚⾯)、403(服务器拒绝访问,权限不够)。
  • 500~599 :服务器端出现错误,常⽤500(请求未完成。服务器遇到不可预知的情况)。
发布了47 篇原创文章 · 获赞 23 · 访问量 3403

猜你喜欢

转载自blog.csdn.net/qq_39611230/article/details/103878064