倚天剑第一式——爬虫基础

news2024/10/10 4:29:00

博主简介:博主是一个大二学生,主攻人工智能领域研究。感谢缘分让我们在CSDN相遇,博主致力于在这里分享关于人工智能,C++,python,爬虫等方面的知识分享。如果有需要的小伙伴,可以关注博主,博主会继续更新的,如果有错误之处,大家可以指正。

专栏简介:本专栏致力于研究python爬虫的实战,涉及了所有的爬虫基础知识,以及爬虫在人工智能方面的应用。文章增加了JavaScript逆向,网站加密和混淆技术,AST还原混淆代码,WebAssembly,APP自动化爬取,Android逆向等相关技术。同时,为了迎合云原生发展,同时也增加了基于Kubernetes,Docker,Prometheus,Grafana等云原生技术的爬虫管理和运维解决方案。

订阅专栏    订阅专栏

博主分享:给大家分享一句我很喜欢的话:“每天多一点努力,不为别的,值为日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!”

爬虫基础

在写爬虫之前,我们需要先了解一些基础知识,如HTTP原理,网页的基础知识,爬虫的基本原理,Cookie的基本原理,多进程和多线程的基本原理等,了解这些有助于帮助我们更好的理解和编写网络爬虫相关的程序。

HTTP基本原理

URI和URL

URI的全称为(Uniform Resourse Identifier),即统一资源标志符;URL的全称是(Uniform Resourse Locator),即统一资源定位符。简而言之,就是我们在访问一个网站的时候,点开网站的链接,这个链接就是URL或URI。

根据图中所展示的URI和URL的关系,URL是URI的子集,这其中还包括了一个URN,URN全称  (Uniform Resourse Name),根据名字我们就可以知道,这只是一个资源命名,他不为资源做任何定位处理,你可以理解为一本书的编号,可以唯一标识这本书,但是却不能告诉我们怎么去买到它。在目前的互联网中,URN用的很少,几乎所有都是URI和URL,所以对于一般的网页链接,我们都可以称之为URI或URL,一般称为URL(博主习惯)。但是URL也有他的格式:

schame://[username:password@]hostname[:port][;parameters][?query][ frament]

其中括号所代表的是非必要部分(https:baidu.com)。这里就简单的解释必要的部分的含义:

(1).schame:协议,一般是https,除了这个,其他常用的协议由http,ftp等,另外审查么也被称为protocol,二者都是代表协议的意思。

(2).hostname:主机地址,可以是域名或IP地址,

(3).parameters:参数,用来指定访问某个资源时的附加信息,但是现在用的很少,所以很多人都将parameters和query混用。

HTTP和HTTPS

爬虫中爬取的网页一般都是基于http或https协议的,因此我们的所有示例均是以以http或https协议为基础的网页链接。

HTTP的全称是Hypertext Transfer Protocol,中文名为超文本传输协议,其作用是把超文本数据从网络传输到本地浏览器,能够保证高效而准确的传输超文本文档。HTTP是由万维网协会(Word Wide Web Consortium)和Internet工作小组IEFT(Internet Engineering Task Force)合作制定的规范。

HTTPS的全称是Hypertext Transfer Protocol Secure Socket Layer,是以安全为目标的HTTP通道,简单来讲就是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。

注:HTTP和HTTPS协议都属于计算机网络中的应用层协议,其下层是基于TCP协议实现的,TCP协议属于计算机网络中的传输层协议。本专栏的目的是为了讲解爬虫知识,因此这里就不对TCP,IP等类容进行深入讲解,如果感兴趣的话,博主推荐两本书《计算机网络》和《图解HTTP》。

HTTP请求过程

在浏览器地址栏中输入一个URL,按下回车,便可观察到对应的页面信息。实际上,这个过程是浏览器先向网站所在的服务为器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的相应,接着传回浏览器。浏览器再对传回的响应包中的页面源代码进行解析。

 为了更直观的说明上述情况,这里用Chorme浏览器开发者模式下的NetWork监听组件来做一下演示。

打开chorme浏览器,访问百度,这时候单击鼠标右键并选择“检查”(或者按F12)。如图:

右边的显示就是Network组件,我们没刷新一次,就会看到Network中多几个条目,其中一个条目就代表一次发送请求和接收响应的过程。

现在,我们来分析一下各列的意义:

(1)第一列Name:请求的名称,一般会用URL的最后一部分类容作为名称。

(2)第二列Status:响应的状态码。这里显示200,代表响应正常。通过状态码,我们就可以判断发送请求之后是否得到了正常的响应。

(3)第三列Protocol:请求的协议类型。h1代表HTTP1.1版本,h2表示HTTP2版本。

(4)第四列Type:请求的文档类型,这里显示的是text,表示是text类型,document则代表HTML文档。

(5)第五列Initiator:请球源。用来标记请求是由哪个对象或进程发起的。

(6)第六列Size:从服务器下载的文件或请求的资源大小。如果资源是从缓存中取得的,则该列显示from cache。

(7)第七列Time:从发起到获取响应所花费的时间。

(8)第八列Waterfall:网络请求的可视化瀑布流。 

上面展示的图示和解释有所差别,这是因为博主只是点开了一个搜索网页,大家点开了子网页,就会出现完整的Network组件监听:

 单击条目,就可以获得具体信息:

我们后续的文章中在进行爬虫的时候,就会根据这其中的信息进行操作。

首先General部分,其中Requests URL为请求的URL,Requests Method为请求的方法,Status Code为响应状态码,Remote Address 为远程服务器的地址和端口,Refer热热 Policy为Referrer判别策略。 

请求

请求,英文为Request,由客户端发往服务器,分为四部分内容:请求方法(Request Method),请求的网址(Request URL),请求头(Request Headers),请求体(Request Body)。

⚪请求方法:

在浏览器中输入一个网址URL,点击回车,这个时候一般是发送GET请求,请求的参数会包含到URL中。POST请求一般则是在提交表单的时候,例如,你在登陆的时候,填好密码,用户名,点击登陆的时候,这时候就是POST请求

二者的区别:

GET请求的参数包含在URL中,数据可以在URL中看到,POST请求的URL中则不会包含这些数据,数据都是以表单形式传输,会包含在请求体中。

GET请求提交的数据最多为1024字节,而POST则没有限制。

当然,除了这些的请求方式,还有其他的请求方式,例如HEAD,PUT,DELETE,CONNECT,OPTIONS,TRACE等。

请求方法
方法描述
GET请求页面,并返回页面内容
POST大多数用于提交表格或上传文件,数据包含在请求体中
PUT用客户端传向服务器的数据取代指定文档中的内容
DELETE请求服务器删除指定的页面

CONNECT

把服务器当作跳板,让服务器当作客户端访问其他页面
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试和诊断
HEAD和GET请求相似,但是返回的响应没有具体的内容,用于获取报头

 请求的网址

①请求头

用来说明服务器要使用的附加信息。

(1)Accept:请求报头域,用于指定客户端可以就收哪些类型的信息。

(2)Accept-Language:用于指定客户端可以接受的语言类型。

(3)Accept-Encoding:用于指定客户端可以使用的编码类型

(4)Host:用于指定请求的客户端的IP和端口号,其内容为请求URL的原始服务器或网关的位置。

(5)Cookie:也常用复数形式Cookies,这是网站为了辨别用户,进行会话跟踪而存储在用户本地的数据。

(6)referer:用于标识请求是从哪个页面发来的,服务器可以根据这一信息并作出相应的处理,如做来源统计,防盗链处理等。

(7)User-Agent:简称UA,这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本,浏览器版本等信息。做爬虫时可以加上此信息,可以伪装成浏览器,如果不加,很容易被识别出来。

(8)Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表html格式,image/gif代表GIF图片,application代表JSON类型。

②请求体

请求体一般承载的内容为POST请求中的表单数据,对于GET请求,为空。

响应

响应,即Response,由服务器返回给客户端,可以分为三部分:响应状态码(Response Status Code),响应头(Response Headers)和响应体(Response Body)。

响应状态码表示服务器响应的状态,200表示正常,404表示页面没有找到,500代表服务器内部发生错误。

①响应头

响应头,包含了服务器对请求的应答信息,如Content-Type,Server,Set-Cookie等。这里就不过多介绍了。

②响应体

响应体是最为重要的,响应的所有正文数据都存在响应体中,例如,请求网页时,响应体就是HTML代码。

Web网页基础

我们用浏览器访问不同的页面的时候,所呈现的页面都有所不同,你有没有想过为什么会这样?本节我们就了解一下网页的组成,结构和节点等内容。由于博主不是主攻前端,所以这里只能简单的介绍。

网页的组成

网页可以分为三大部分——HTML,CSS,javaScript。如果把网页比作一个人,那么HTML就相当于骨架,CSS为皮肤,JavaScript相当于肌肉。这三者结合起来就能杏形成网页。‘

HTML

HTML(Hypertext Markup Language)中文翻译为超文本标记语言。但是一般称为HTML。

HTML是一种用来描述网页的语言。网页包括图片,文字,视频,按钮等复杂元素。网页通过不同类型的标签来表示不同类型的元素,如用img标签表示图片,用video表示视频,用p标签表示段落,这些标签之间的布局常由布局标签div嵌套组合而成。各种标签通过不同的排列和嵌套形成最终的网页框架。

打开浏览器开发者工具,点击Elements,这里显示就是HTML代码。

CSS

HTML定义了网页的骨架,但是只有HTML的页面布局并不完美,为了让网页看起来好看,就可以用CSS。

CSS,全称为Cascading Style Sheets,即层叠样式表。“层叠”是指当HTML中引用多个样式文件,并且样式发生重叠的时候,浏览器能够按照层叠顺序来处理这些样式。“样式”是指网页中文字大小,颜色,排列,间距等格式。CSS是目前唯一的网页页面排版样式标准。

style中的就是CSS样式。

JavaScript

javaScript简称js,是一种脚本语言,HTML和CSS组合使用,提供给用户的只是一种静态信息,缺乏交互性。我们在网页中还可以看到交互和动画效果,例如进度条,提示框,轮播图等。这就是JavaScript的功能。

JavaScript一般也是以单独的文件来运行加载,后缀为.js,在HTML中通过script标签即可引入:

<script src='jquery-2.1.0.js></script>

这里的标签格式要记住,后面的爬虫会用到。

网页的具体知识这里就不做介绍,感兴趣的小伙伴可以去搜索相关知识。

爬虫的基本原理

我们把互联网比作一个大的蜘蛛网,那么爬虫就是蜘蛛网上的蜘蛛,没爬寻一个节点,就相当于访问了一个页面,获取了信息。顺着节点连线连续爬行,到达下一个节点,意味着爬虫可以通过网页之间的链接关系继续获取后续的网页,当整个网页涉及的页面被爬取下来,数据也就保存下来了。

简单来讲,爬虫就是获取网页并提取和保存信息的自动化程序。

1.获取网页

2.提取信息

3.保存数据

4.自动化程序 

代理的基本概念

由于爬虫的访问频率很快,现在的服务器都会由反爬虫机制,一旦你访问频率过快,就会被锁IP,也会发生报错。于是,python推出了IP代理。

基本原理

代理实质就是代理服务器。我们不是用IP代理爬虫的时候,我们会向服务器发送请求,服务器返回响应。设置服务器代理,就相当于在客户端和服务器之间搭一座桥,此时,我们发送请求的时候先向伪代理器发送请求,伪代理器再将请求发送到网页服务器,同理,返回的响应也要经过伪代理器。而这个过程中,Web服务器识别的IP不再是客户端的IP,成功实现了IP伪装,这就是代理的基本原理。

爬虫代理

如果我们平凡的去访问一个网页,那么此网站就会让我们输入验证码或者锁IP,爬虫就不能继续正常运行,所以,我们就需要用代理隐藏真实的IP,这就叫做爬虫代理,也叫IP代理,我习惯叫做IP代理。

代理分类

对代理进行分类时,可以根据协议,也可以根据代理的匿名程度。

①根据协议区分

1.FTP代理服务器:主要用于访问FTP服务器,一般有上传,下载,以及缓存功能。端口一般为21,2121等。

2.HTTP代理服务:主要用于访问网页,一般有内容过滤和缓存功能,端口一般为80,8080,3128等。

3.SSL/TLS代理:主要用于访问加密网站,一般有SSL或TLS加密功能(最高支持128位加密强度),端口一般为443.

4.RTSP代理:主要用于Realplayer访问Real流媒体服务器,一般有缓存功能,端口一般为554.

5.Telnet代理:主要用于Telnet远程控制(黑客入倾计算机时常用于身份隐藏),端口一般为23.

6.POP3/SMTP代理:主要用于以POP3/SMTP方式收发邮件,一般有缓存功能,端口为110/25.

7.SOCKS代理:只是单纯的传递数据包,不关心具体协议和用法,所以速度很快,一般有缓存功能能,端口一般为1080.SOCKS代理协议又分为SOCKS4和SOCKS5,SOCKS4协议只支持TCP,SOCLKS5则支持TCP和UDP,还支持各种身份验证机制,服务器端域名解析等。简单来说,SOCKS4能做到的SOCKS5能做到,SOCKS5能做到的SOCKS4不能做到。

②.根据匿名程度分

1.高度匿名代理:高度匿名代理会将数据包原封不动的转发,在服务端看来似乎真的是一个普通的客户端在访问,记录的IP则是代理服务器的IP。

2.普通匿名代理:普通匿名代理会对数据包进行一些改动,服务端可能会发现正在访问自己的是一个代理IP,并且有一定的概率去追查客户端真实的IP。这里的代理服务器通常会加入的HTTP头HTTP_VIA和HTTP_X_FORWARDED_FOR.

3.透明代理:透明代理不但改动了数据包,还告诉了服务器客户端真实的IP,这种技术可以提高浏览速度,和用内容过滤提高安全性,其他的没啥用处。

4.间谍代理:间谍代理是组织或个人创建的代理服务器,用于记录用户传输的数据,然后对记录的数据进行研究,监控等。 

爬虫中还涉及了多线程和多进程的知识,他们我已经在前面的文章中介绍过了,这里就不过多解释了,后面实际操作中会进行介绍。

总结

本篇文章作为本专栏的第一篇文章,目的是了解一下爬虫的相关知识,为后面的爬虫学习打好基础。由于博主对前端知识不是很了解,文章中涉及的网页知识不够深入,如果有错误,敬请各位小伙伴指出。

开学了,预祝各位同学学习进步,生活安康,万事如意!

点赞加关注不迷路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker部署ThingsBoard-Gateway ODBC数据上传(五)

目录 1、linux系统安装Docker 1.docker安装Python 2.安装ODBC包 2、docker安装运行tb-gateway 3、修改config配置文件 4、 安装ODBC驱动程序 5、重启docker 因为需要数据库ODBC数据上传&#xff0c;所以我选择单独部署在远程服务器的docker容器中。其原理大致是这样的&…

在中国市场,OATLY燕麦奶依靠什么成为“标杆品牌”?

在中国新茶饮赛道异常拥挤、新品类层出不穷的局面下&#xff0c;OATLY作为一个来自瑞典的品牌&#xff0c;仅用3年时间&#xff0c;不仅顺利通过国外食品饮料品牌进军中国市场九死一生的惨烈考验&#xff0c;而且凭借其主打产品燕麦奶&#xff0c;成功在中国市场缔造了一个全新…

CameraX + MLKit 打造超简单 OCR 方案

前言 疫情期间隔三差五就要做核酸&#xff0c;随时都要准备身份证给大白扫描识别。写一篇文章聊聊其中用到的技术吧&#xff0c;顺道缅怀这段难忘的经历&#xff0c;希望大家的生活彻底告别的疫情影响&#xff0c;早日回归正常&#xff01; 身份证扫描主要用到是文字识别技术&…

Java程序设计实验3 | 面向对象(上)

*本文是博主对Java各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 目录 一、实验…

2023软考软件设计师易混淆知识点~(5)

将2023上半年软考《软件设计师》易混淆知识点&#xff0c;分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01;易混淆点4:软件维护类型1、更正性维护:针对真实存在并已经发生的错误进行的维护行为。2、预防性维护:针对真实存在但还未发生的错误进行的维护。3、适应性维护…

物联网毕业设计项目选题:harmonyos鸿蒙系统开发智能小车案例-hi3861v100开发板-留言领源码

华清远见FS-Hi3861开发套件&#xff0c;支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能&#xff0c;开发板板载资源丰富&#xff0c;包括传感器、执行器、NFC、显示屏等&#xff0c;同时还配套丰富的拓展模块。开发板配套丰富的学习资料&#xff0c;包括全套开发教程…

洛谷 P2983 [USACO10FEB]Chocolate Buying S

这题其实不难&#xff0c;但时间复杂度是大难点 题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Store features N (1 < N < 100,000) kinds of chocolate in essentially unlimited quantities. Each type i o…

网络电缆有哪些类型,网络工程师必知!

在 21 世纪&#xff0c;理想的目标是完全消除网络电缆的使用&#xff0c;并生活在一个一切都以无线方式管理的世界中。没有电缆的困扰&#xff0c;管理服务器会容易得多&#xff0c;我们也不必浪费时间标记和跟踪数百条电缆。 在那个时候到来之前&#xff0c;我们一直坚持使用…

F623光猫超级管理员密码获取

中兴F623光猫超级管理员密码获取 ⚠️事前说明 如果你不熟悉光猫的操作&#xff0c;请勿修改或拆解任何与光猫有关的命令、零件、网线等。操作有风险&#xff0c;运行需谨慎。 光猫型号&#xff1a;ZXHN F623 所属运营商&#xff1a;中国移动 硬件版本号&#xff1a;V6.0 …

算法刷题打卡第77天:解密消息

解密消息 难度&#xff1a;简单 给你字符串 key 和 message &#xff0c;分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下&#xff1a; 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。 将替换表与普通英文字母表对齐&#xff0c;…

模型量化I—基础概念

最近接了个模型量化的任务&#xff0c;读了几篇比较新的论文&#xff0c;并跑通了几个模型。因为第一次接触这个领域&#xff0c;没有理论基础打底&#xff0c;直接读“大成”性的论文&#xff0c;常常有种云山雾罩的感觉&#xff0c;如空中楼阁&#xff0c;不知道每个结论的来…

java常用类: String,StringBuffer和StringBuilder

java常用类型: Ineteger等包装类 String类&#xff0c;StringBuffer类和StringBuilder类 Math类及常用方法 System类及常用方法 Arrays类及常用方法 BigInteger类和BigDecimal类及常用方法 日期类Date类,Calender类和LocalDateTime类 文章目录String介绍String创建细节String s…

转投高通平台,大众展露主导自动驾驶的野心

/ 导读 /2022年&#xff0c;英特尔几乎以亏本的价格推动Mobileye上市&#xff0c;成为市场上的一大看点。出现这种情况的原因&#xff0c;除了整个美国自动驾驶大环境不好&#xff0c;和Mobileye接连失去几个大客户不无关系。其中尤以大众这样体量的客户对于Mobileye的影响最为…

Ubuntu 系统如何以 root 用户SSH登录实例

文章目录前言总结前言 出了点小插曲&#xff0c;心情烦躁&#xff0c;搞得Ubuntu都连不上了&#xff0c;心态炸裂。 不过后面冷静下来以后还是找到了解决办法&#xff0c;可以用ssh成功连上root权限的Ubuntu。 因为很少接触Ubuntu&#xff0c;所以不知道即使root的密码正确…

09技术太卷我学APEX-定制页面及导航菜单权限

09技术太卷我学APEX-定制页面及导航菜单权限 0 始终没搞明白APEX的角色如果分配页面的权限&#xff0c;只能自己定制一个 APEX现学现卖开发了个《5217仓库管理》&#xff0c;功能在春节前就搞定了&#xff0c;卡在对页面的权限控制&#xff0c;经过翻阅牛人的博客&#xff0c…

使用vue3,vite,less从零开始学习硅谷外卖.docx

严正声明&#xff01; 重要的事情说三遍&#xff0c;本文章仅供分享&#xff0c;文章和代码都是开源的&#xff0c;严禁以此牟利&#xff0c;严禁侵犯尚硅谷原作视频的任何权益&#xff0c;我知道学习编程的人各种各样的心思都有&#xff0c;但这不是你对开源社区侵权的理由&am…

读书:《高效的秘密》

#《高效的秘密》的作者是《纽约时报》商业调查记者查尔斯都希格&#xff0c;他的另一本畅销书是《习惯的力量》。 高效不是超额工作、拼命工作&#xff0c;甚至牺牲自己的个人生活。高效的秘密取决于你做选择的方式。 一、激发动力&#xff0c;重新审视效率产生的源头 掌控力…

1.7 Cubemx STM32F429_RTX FATFS 库函数讲解(三)

文章目录1、打开文件夹2、读取文件夹3、打开\新建一个文件5、读取文件1、打开文件夹 FRESULT f_opendir ( DIR* DirObject, /* Pointer to the blank directory object structure */ const TCHAR* DirName /* Pointer to the directory name */ ) 函数说明: 此函数可以打开…

React中如何使用Mobx

一、Mobx前端状态管理框架 基础概念&#xff1f; 1. 什么是Mobx Mobx是一个简单、可扩展的状态管理库 2. 什么是状态管理&#xff1f; 状态管理就是将分布在各个组件、各个模块中的状态的变化&#xff0c;按照一定的规则&#xff0c;进行统一的管理。 3. 为什么需要状态管…

NX二开ufun函数创建块/基准平面/凸台/垫块/腔体

本节主要讲述通过ufun函数直接创建块、基准平面、凸台、垫块、腔体&#xff0c;涉及ufun函数如下&#xff1a; 1、创建块 UF_MODL_create_block 2、创建基准平面 UF_MODL_create_fixed_dplane 3、创建凸台 UF_MODL_create_boss 4、创建垫块 UF_MODL_create_rect_pad5 5、创…