「数据分析师的网络爬虫」Python 爬虫入门基础原理

文章目录

  • 内容介绍
  • 网络通信基础知识
  • 爬虫的原理与流程

内容介绍

开发环境为 Python3.6 ,爬虫项目全部内容索引目录

看懂Python爬虫框架,所见即所得一切皆有可能

本文介绍 Python数据分析师 网络爬虫入门基础的内容,了解爬虫的基础知识。

虽说不会敲代码的 Python数据分析师 不是好的数据分析师,但你不是正儿八经的开发人员,代码敲的那么溜有什么用?学点数据爬虫基础能让繁琐的数据CV工作(Ctrl+C,Ctrl+V)成为自动化就足够了。

网络通信基础知识

1.网络通信
「数据分析师的网络爬虫」Python 爬虫入门基础原理_第1张图片
OSI参考模型

  • TCP/IP的分层模型 OSI协议参考模型,是基于国际标准化组织(ISO)的建议发展起来的。
  • 它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。这个7层的协议模型虽然规定得非常细致和完善,但在实际中却得不到广泛的应用,其重要的原因之一就在于它过于复杂。
  • 此后很多协议模型的基础。与此相区别的TCP/IP协议模型将OSI的7层协议模型简化为4层,从而更有利于实现和使用。

TCP/IP参考模型

  • 网络接口层:网络接口层是TCP/IP的最底层,负责将二进制流转换成数据帧,并进行数据帧的发送和接收。数据帧是网络传输的基本单元。
  • 网络层:网络层负责在主机之间的通信中选择数据包的传输路径,即路由。当网络收到传输层的请求后,使用路由算法来确定是直接交付数据包,还是把它传递给路由器,最后把数据包交给适当的网络接口进行传输。
  • 传输层:负责实现应用程序之间的通信服务,又称为端到端通信。
    传输层要提供可靠的传输服务,以确保数据到达无差错、无乱序。为了达到这个目的,传输层协议软件要进行协商。传输层协议软件要把传输的数据流分为分组。
  • 应用层:应用层是分层模型的最高层。应用程序使用相应的应用层协议,把封装好的数据交给传输层或是传输层接收数据并处理。

2.HTTP请求过程

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

  • 建立TCP连接:在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
  • Web浏览器向Web服务器发送请求命令:一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。
  • Web浏览器发送请求头信息:浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
  • Web服务器应答:客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。
  • Web服务器发送应答头信息:正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
  • Web服务器向浏览器发送数据:Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
  • Web服务器关闭TCP连接:一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

3.HTTP请求方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式。

  • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性。
  • HEAD:向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
  • GET:向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除Request-URL所标识的资源。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

4.HTTP状态码以及错误原因

  • 1XX:信息性状态码(服务器正在处理请求)
  • 2XX:成功状态码(请求正常处理完毕)
  • 3XX:重定向状态码(需要进行额外操作以完成请求)爬虫库一般会对重定向做处理;动态网页具有自动跳转的特点
  • 4XX:客户端错误状态码(服务器无法处理请求)
  • 5XX:服务器错误状态码(服务器处理请求出错)
用的较多的是2XX和4XX,还有5XX后面会讲解具体怎么解决对应问题
1. 200 OK:客户端发来的请求在服务器端被正常处理
2. 400 Bad Request: 报文存在语法错误,服务器无法理解(例如:前后端编程逻辑不一致导致)
3. 403 Forbidden:请求资源的访问被服务器拒绝(服务器不用给出理由)需要验证登录,或者被封IP
4. 404 Not Found: 服务器上没有请求的资源找不到,一般会跳过不爬
5. 500 Internal Server Error: 服务器端执行请求时发生故障
6. 503 Service Unavailable:服务器超负荷或者停机维护

5.HTTP请求头信息

  • Host:请求主机器名,可为IP也可为域名。
  • Accept-Encoding:可接受的文本压缩算法,如:gzip, deflate。
  • Accept-Language:支持语言,客户端浏览器的设置,如:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3。
  • User-Agent:浏览器信息,如:Mozilla/5.0 (Macintosh; Intel Mac OSX 10.7; rv:12.0) Gecko/20100101 Firefox/12.0。
  • Cookie:服务器在上次设置的COOKIE,包括作用域名,过期时间,键与值。
  • Referer:从一个连接打开一个新页面,新页面的请求一般会加此信息,标名是从哪里跳过来的。

6.HTTP响应头信息

  • Allow:服务器支持哪些请求方法,如GET、POST等。
  • Cache-Control:从服务器到客户端的缓存机制,如:Cache-Control:max-age=3600。
  • Connection:HTTP连接策略,如:Connection: Keep-Alive。
  • Content-Encoding:响应资源所使用的编码类型,如:gzip,deflate。
  • Transfer-Encoding:数据在网络传输当中的编码方式,如:chunked。
  • Content-Type:响应内容的文档类型(html,json等),如: text/html;charset=utf-8。
  • Date:服务器端响应消息发出时的GMT时间。
  • Last-Modified:服务器端响应内容文档的最后改动时间。
  • Set-Cookie:设置和所访问页面关联的Cookie。

7.基本网页机构

网页分成三个层次,即:结构层(HTML)、表示层(CSS)、行为层(Javascript)。对于一个网页,HTML定义网页的结构,CSS描述网页的样子,JavaScript设置对浏览器事件的响应(点击按钮,输入文本等)。

  • HTML:超文本标记语言(Hyper Text Markup Language),是用来描述网页的一种语言。

  • CSS:层叠样式表(Cascading Style Sheets),定义如何显示 HTML 元素,语法为:selector {property:value} (选择符 {属性:值})

  • JavaScript:一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行。

爬虫的原理与流程

「数据分析师的网络爬虫」Python 爬虫入门基础原理_第2张图片

1.什么是爬虫

爬虫:请求网站并提取数据的自动化程序。

百科:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

2.爬虫基本流程

  • 发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
  • 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
  • 解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
  • 保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。

3.Request和Response

Request:浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。

  • 请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
  • 请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定。
  • 请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
  • 请求体:请求时额外携带的数据如表单提交时的表单数据

Response:服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。

  • 响应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误。
  • 响应头:如内容类型、内容长度、服务器信息、设置Cookie等等。
  • 响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

4.能抓取哪些数据

  • 网页文本:如HTML文档、Json格式文本等。
  • 图片:获取到的是二进制文件,保存为图片格式。
  • 视频:同为二进制文件,保存为视频格式即可。
  • 其他:只要是能请求到的,或者说网页上能看到的都能获取。

5.解析方式

  • 直接处理(例:静态网页)
  • Json解析(例:动态渲染或加载)
  • 正则表达式(例:一般抓取图片用)
  • BeautifulSoup(例:解析网页)
  • XPath(例:定位元素)

6.爬虫代理

  • 启用远程平台的人通常有两个目的:对更大计算能力和灵活性的需求,以及对可变 IP 地址的需求。
  • 有一些网站会设置访问阈值,也就是说,如果一个IP访问速度超过这个阈值,那么网站就会认为,这是一个爬虫程序,而不是用户行为。为了避免远程服务器封锁IP,或者想加快爬取速度,一个可行的方法就是使用代理IP,我们需要做的就是创建一个自己的代理IP池。
  • 思路:通过免费IP代理网站爬取IP,构建一个容量为100的代理IP池。从代理IP池中随机选取IP,在使用IP之前,检查IP是否可用。如果可用,使用该IP访问目标页面,如果不可用,舍弃该IP。当代理IP池中IP的数量小于20的时候,更新整个代理IP池,即重新从免费IP代理网站爬取IP,构建一个新的容量为100的代理IP池。

7.保存数据

  • 文本:纯文本、Json、Xml等。
  • 关系型数据库:如MySQL、Oracle、SQL Server等具有结构化表结构形式存储。
  • 非关系型数据库:如MongoDB、Redis等Key-Value形式存储。
  • 二进制文件:如图片、视频、音频等等直接保存成特定格式即可。

你可能感兴趣的:(Python,爬虫基础和项目管理,python,网络,爬虫,入门)