Python 爬虫相关知识简介

前导知识
端口

"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为逻辑端口和物理端口,其中逻辑端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。

在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的ip地址来进行互联网络中的路由选择,把数据包顺利的传送到目的主机。大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。

为了标识这些应用程序,所以给这些网络应用程序都用数字进行了标识。为了方便称呼这个数字,叫做端口。这里的端口我们一般都叫做 ‘逻辑端口’

通讯协议

• 国际组织定义了通用的通信协议 TCP/IP协议
• 所谓协议就是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则
• HTTP又叫做超文本传输协议(是一种通信协议) HTTP 它的端口是 80

网络模型

在这里插入图片描述
后期更新了新的参考模型 TCP/IP参考模型
在这里插入图片描述

HTTP 和 HTTPS

URL的开头会有http或https,这就是访问资源需要的协议类型。有时,我们还会看到ftp,sftp,smb开头的URL,他们都是协议类型。在爬虫中,我们抓取的页面通常就是http或https协议的,这里首先了解一下这两个协议的含义。

HTTP的全称是Hyper Text Transfer Protocol,中文名叫超文本传输协议。HTTP协议是用于从服务器传输超文本数据到本地浏览器的传送协议,它能保证高效而准确的传送超文本文档。HTTP由万维网协会和Internet工作小组IETF共同制定的规范,目前广泛使用的是HTTP1.1版本。

HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,简称HTTPS。

HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,它的主要作用可以分为两种。
一是建立一个信息安全通道来保证数据传输的安全;二是用来确认网站的真实性。

现在越来越多的网站都已经向HTTPS方向发展。

SSL怎么理解?

• SSL当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输
在这里插入图片描述

Http请求与响应

HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息
在这里插入图片描述

  1. 当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
  2. 网站服务器接收到这个请求后进行处理和解析,服务器把响应对象发送回给浏览器。
  3. 浏览器分析响应对象中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
  4. 当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

此处的客户端即代表我们的浏览器,服务器即要访问的网站所在的服务器。

为了更直观的说明这个过程,我们可以用Chrome浏览器的开发者模式下的Network监听组件来做演示,它可以显示访问当前请求网页时发生的所有网络请求和响应。

我们在这里访问百度https://www.baidu.com/,输入该URL后回车,观察这个过程中发生了怎样的网络请求。可以看到在Network页面下方出现了一个个的条目,其中一个条目就代表一次发送请求和接收响应的过程。
在这里插入图片描述
我们先观察第一个网络请求,即www.baidu.com,其中各列的含义如下:

Name:请求的名称,一般会将URL的最后一部分内容当作名称
Status:响应的状态码,这里显示为200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应
Type:请求的文档类型,这里为document,代表我们这次请求的是一个HTML文档,内容就是一些HTML代码
Initiator:请求源,用来标记是由哪个对象或进程发起的。
Size:从服务器下载的文件和请求资源的大小。如果是从缓存中取得的资源,则会显示from cache
Time:发起请求到获取响应所用的总时间
Waterfall:网络请求的可视化瀑布流

点击这个条目,即可看到更详细的信息。

首先是General部分,Request URL为请求的URL,Request Method为请求的方法,Status Code为响应状态码,Remote Address为远程服务器的地址和端口,Referrer Policy为引用站点策略。

再继续往下看,有Response Headers和Request Headers,这分别代表响应头和请求头,请求头带有许多请求信息,如浏览器标识等,这是请求的一部分,服务器会根据请求头内的信息判断请求是否合法,进而做出对应的响应,而响应头则是响应的一部分,包含文档类型,日期等信息,浏览器接收到响应后,会解析响应内容,进而呈现网页内容。

请求

请求,由客户端向服务器端发出,可以分为4部分内容:请求行,请求头,空行,请求体(请求数据)
下图给出了请求报文的一般格式。
在这里插入图片描述
一个典型的HTTP请求示例

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: same-origin
Referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Python%20%20%E6%89%8B%E5%8A%A8%E5%9B%9E%E6%94%B6%E5%9E%83%E5%9C%BE&oq=Python%2520%25E6%2594%25B6%25E5%2588%25B0%25E5%259B%259E%25E6%2594%25B6%25E5%259E%2583%25E5%259C%25BE&rsv_pq=f5baabda0010c033&rsv_t=1323wLC5312ORKIcfWo4JroXu16WSW5HqZ183yRWRnjWHaeeseiUUPIDun4&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=2315&rsv_sug3=48&rsv_sug2=0&rsv_sug4=2736
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=4049831E3DB8DE890DFFCA6103FF02C1
请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP 0.9:只有基本的文本 GET 功能。
HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP 1.1:在 1.0 基础上进行更新,新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP 2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为 :method、:scheme、:host、:path这些键值对。

常见的请求方法有两种:GET和POST
GET : 查询参数都会在URL上显示出来
POST : 查询参数和需要提交数据是隐藏在Form表单里的,也就是包含在请求体中,不会在URL地址上显示出来
(GET请求提交的数据最多只有1024字节,而POST方式没有限制)
在这里插入图片描述

请求头

请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、User-Agent等,下面简要说明一些常用的头信息。

Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置
Cookie:这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据,它的主要功能是维持当前访问会话。
Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,例如来源统计、防盗链处理等。
User-Agent:简称UA,它可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出爬虫。
Content-Type:也叫互联网媒体类型或者MIME类型,在HTTP协议消息头中,它用来表示具体的请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片。
更多对应关系可以查看此对照表:http://tool.oschina.net/commons

因此,请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头。

请求体

请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。
在这里插入图片描述
在爬虫中,如果要构造POST请求,需要使用正确的Content-Type,并了解各种请求库的各个参数设置时使用的是哪种Content-Type,不然可能会导致POST提交后无法正常响应。

爬虫介绍
什么是爬虫?

• 简单一句话就是代替人去模拟浏览器进行网页操作,下面概要介绍一下

一、获取数据,爬虫首先要做的工作就是获取数据,python提供了很多库帮助我们实现这个操作,如urllib、requests等
二、提取信息,获取到原始数据之后,接下来就是分析数据,从中提取我们想要的数据。首先,最通用的方法便是采用正则表达式提取,这是一个万能的方法,但在构造正则表达式时比较复杂且容易出错,另外有一些提取信息的库,如bs4,lxml等。
三、保存数据,提取信息后,我们一般会将提取到的信息保存到某处以便后续使用,这里保存的形式多种多样,如可以简单保存为TXT文本或者JSON类型,也可以保存到数据库,如MySQL和MonggoDB等。
四、自动化程序,说到自动化程序,意思是说爬虫可以代替人来完成这些操作。首先,我们手工当然可以提取这些信息,但是当量特别大时,肯定还是要借助程序。爬虫就是代替我们来完成这份爬取工作的自动化程序,它可以在抓取过程中进行各种异常处理、错误重试等操作,确保爬取持续高效的运行。
为什么需要爬虫?

• 为其他程序提供数据源 数据分析、大数据、人工智能等等

爬虫能抓怎样的数据

在网页中我们能看到各种各样的信息,最常见的便是常规网页,它们对应着HTML代码,而最常抓取的便是HTML源代码。

另外,可能有些网页返回的不是HTML代码,而是一个JSON字符串(其中API接口大多采用这样的形式),这种格式的数据方便传输和解析,他们同样可以抓取,而且数据提取更加方便。

上述的内容其实都对应各自的URL,是基于HTTP或HTTPS协议的,只要是这种数据,爬虫都可以抓取。

企业获取数据的方式?

1.公司自有的数据
2.第三方平台的数据 (百度指数、数据堂)
3.爬虫爬取的数据

Python 做爬虫的优势

PHP : 对多线程、异步支持不太好
Java : 代码量大,代码笨重
C/C++ : 代码量大,难以编写
Python : 支持模块多、代码简洁、开发效率高 (scrapy框架)

爬虫的分类

通用网络爬虫:传统的搜索引擎,例如 baidu google yahu
聚焦网络爬虫: 根据既定的目标有选择的抓取某一特定主题内容
增量式网络爬虫:是指对已下载网页采取增量式更新和只爬取新产生的或者已经发生变化的网页
深层网络爬虫:web页面按存在方式可以分为表层网页和深层网页,表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的web页面,深层网页是那些大部分不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的web页面,例如用户登录或注册后才能访问的页面

几个概念

URI和URL

这里我们先了解一下URI和URL,URI为统一资源标志符,URL:为统一资源定位符。
URL是URI的子集,也就是说每个URL都是URI,但不是每一个URI都是URL。URI还包括一个子类叫做URN,即统一资源名称,它只命名资源而不指定如何定位资源。
但在目前的互联网中,URN用的非常少,所以几乎所有的URI都是URL,一般的网页链接我们即可以称之为URL,也可以称之为URI。

•https://new.qq.com/omn/TWF20200/TWF2020032502924000.html
• https: 协议
• new.qq.com: 主机名可以将主机理解为一台名叫 news.qq.com 的机器。这台主机在 qq.com 域名下
• port 端口号: 80 /new.qq.com 在他的后面有个 :80 可以省略
• TWF20200/TWF2020032502924000.html 访问资源的路径
• #anchor: 锚点,在前端中做页面定位的

• 注意 : 在浏览器请求一个url,浏览器会对这个url进行一个编码。(除英文字母、数字和部分标识其他的全部使用% 加 十六进制码进行编码)
• 例如 : https://tieba.baidu.com/f?ie=utf-8&kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&fr=search
• %E6%B5%B7%E8%B4%BC%E7%8E%8B = 海贼王

超文本

接下来,我们再了解一个概念———超文本,其英文名称叫做hypertext,我们在浏览器里面看到的网页就是超文本解析而成的,其网页源代码就是一系列的HTML代码,里面包含各式各样的标签,浏览器解析这些标签后,便形成了我们平常看到的网页,而网页的源代码HTML就可以称作超文本。

例如,我们在Chrome浏览器里面打开任意一个界面,右键任意地方并选择检查项(或者直接按快捷键F12),即可打开浏览器的开发者工具,这时在Elements选项卡即可看到当前网页的源代码,这些源代码都是超文本。
在这里插入图片描述

JavaScript 渲染界面

有时候,我们在用urllib或requests抓取网页时,得到的源代码实际和浏览器中看到的不一样。

这是一个非常常见的问题,现在的网页越来越多的采用Ajax、前端模块化工具来构建,整个网页可能都是由JavaScript渲染出来的,也就是说原始的HTML代码就是一个空壳。

在浏览器中打开页面时,首先会加载这个HTML文档,接着浏览器会发现其中引入的js文件,然后会去请求这个文件,获取之后便会执行JavaScript代码,就会改变HTML中的节点,向其添加内容,最后得到完整的内容。

User-Agent 用户代理

• 作用:记录用户的浏览器、操作系统及版本等,为了让用户更好的获取HTML页面效果
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

Referer

• 表明当前这个请求是从哪个url过来的,服务器因此可以获得一些信息用于处理

会话和Cookie

在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登陆之后才能访问,但是有时候过一段时间就需要重新登录。还有一些网站很长时间都不会失效,这种情况又是为什么?其实这里面涉及会话(Session)和Cookies的相关知识。

在了解会话和Cookies之前,我们还需要了解HTTP的一个特点,叫做无状态。HTTP的无状态是指HTTP协议对事务处理是没有记忆功能的,也就是说服务器不知道客户端是什么状态。当我们向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,而且这个过程是完全独立的,服务器不会记录前后状态的变化。也就是缺少状态记录。这意味着如果后续需要处理前面的信息,则必须重传。

这时,两个用于保持HTTP连接状态的技术就出现了,它们分别是会话和Cookies。会话在服务端,也就是网站的服务器,用来保存用户的会话信息;Cookies在客户端,也可以理解为浏览器端,有了Cookies,浏览器在下次访问页面时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴别出是哪个用户,然后返回对应的请求。

我们可以理解为Cookies里面保存了登录的凭证,有了它,只需要在下次请求携带Cookies发送请求而不必重新输入用户名、密码等信息重新登录。

因此在爬虫中,有时候处理需要登录才能访问的页面时,我们一般会将登录成功后获取的Cookies放在请求头中直接请求。

会话:在Web中,会话对象用来储存特定用户会话所需的属性及配置信息。这样当用户在Web页之间跳转,
存储在会话对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当会话过期或被放弃后,服务器将终止该会话。

Cookies:是指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。
会话维持

我们怎样利用Cookies保持状态呢?当客户端第一次请求服务器时,服务器会返回一个带有Set-Cookie字段的响应给客户端,用来标记是哪一个用户,客户端浏览器会把Cookies保存起来。在下次请求该网站时,会把Cookies放到请求头一起提交给服务器,Cookies携带了会话ID信息,服务器检查Cookies即可找到相应的会话,然后根据会话来辨认用户状态。

Cookies和会话需要配合,一个处于客户端,一个处于服务端,两者共同协作,就实现了登录会话控制。

Cookie中有如下几个属性,我们可以在浏览器开发者工具里面打开Application选项卡,然后点击左侧的Storage部分,最后一项即为Cookies。其中Expires/Max Age属性指的是该Cookie失效的时间。
Size字段表示此Cookie的大小。

会话Cookie和持久Cookie,从表面意思来说,会话Cookie储存在浏览器内存里,在浏览器关闭后失效;持久Cookie保存在客户端硬盘,下次还可以继续使用。严格来说,没有二者之分,只是由Cookie的Expries/Max Age字段决定了过期的时间。

常见误区

在谈论会话机制的时候,常常有这样一种误解——‘只要关闭浏览器,会话就消失了’,对于会话来说,除非程序通知服务器删除一个会话,否则服务器会一直保留。

而恰恰是由于关闭浏览器不会导致会话被删除,所以需要服务器为会话设置一个失效时间,当距离客户端上一次使用会话的时间超过这个失效时间时,才会把会话删除以节省存储空间。

代理的基本原理

代理实际上指代理服务器,英文名叫做proxy server,它的功能是代理网络用户去获取网络信息。就相当于在客户端和服务器之间搭建了一座桥,在这个过程中,Web服务器识别的IP就不是我们本机的IP,就成功实现了IP伪装,这就是代理的基本原理。

爬虫代理:避免同一个IP访问过于频繁的问题

常见代理方式:一、使用网上的免费代理(可用的代理不多)二、使用付费代理服务(质量比免费代理好很多)三、ADSL拨号(拨一次号换一次IP,稳定性高,是一种比较有效的解决方案)

响应状态码

响应状态码表示服务器的响应状态,在爬虫中,我们可以根据状态码来判断服务器响应状态。
在这里插入图片描述

• 200 : 请求成功
• 301 : 永久重定向
• 302 : 临时重定向
• 404 : 请求失败(服务器无法根据客户端的请求找到资源(网页))
• 500 : 服务器内部请求
更多状态码介绍

抓包工具

在这里插入图片描述
Elements : 要素 网页源代码,提取数据和分析数据(有些数据是经过特殊处理的所以并不是都是准确的)
Console : 控制台 (打印信息)
Sources : 信息来源 (整个网站加载的文件)
NetWork : 网络工作(信息抓包) 能够看到很多的网页请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值