python | 爬虫笔记(二)- 爬虫基础

2.1 HTTP原理

一、URI、URL
统一资源标识符,统一资源定位符
协议+路径+资源名称
URL 是 URI 的子集,URI 还包括一个子类叫作 URN,它的全称为 Universal Resource Name,即统一资源名称。
URN 只命名资源而不指定如何定位资源,如 urn:isbn:0451450523,它指定了一本书的 ISBN,能够惟一标识这一本书,可是没有指定到哪里定位这本书,
 
二、超文本 Hypertext
html里有一系列标签,浏览器解析这些标签后便造成了咱们日常看到的网页,而这网页的源代码 HTML 就能够称做超文本。
 
三、HTTP、HTTPS
协议类型;
HTTP 的全称是 Hyper Text Transfer Protocol,中文名叫作超文本传输协议,HTTP 协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证传送高效而准确地传送超文本文档。
HTTPS 的全称是 Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,简称为 HTTPS。
 
SSL
- 创建信息安全通道,保证数据传输安全;
- 确认网站真实性,能够经过锁头确认真实信息;
 
四、HTTP请求过程
浏览器-检查-network 能够查看整个请求和返回过程
五、Request
由客户端向服务端发出。分为Request Method、Request URL、Request Headers、Request Body,即请求方式、请求连接、请求头、请求体。
 
· Request Method
请求方式,请求方式常见的有两种类型,GET 和 POST。
GET:输入网址加回车,URL中包含请求参数的信息;
POST:多为表单提交发起,如用户名密码登录,数据以Form Data即表单形式传输,不会体如今URL中,会包含在 Request Body 中。
GET 方式请求提交的数据最多只有 1024 字节,而 POST 方式没有限制。
因此如登陆(包含敏感信息)和文件上传时,会用POST。
其余方法
 
· Request URL
请求的网址
 
· Request Headers
请求头,用来讲明服务器要使用的附加信息,比较重要的信息有 Cookie、Referer、User-Agent 等
 
 
Request Headers 是 Request 等重要组成部分,在写爬虫的时候大部分状况都须要设定 Request Headers。
 
· Request Body
即请求体,通常承载的内容是 POST 请求中的 Form Data,即表单数据,而对于 GET 请求 Request Body 则为空。
在登陆以前咱们填写了用户名和密码信息,提交时就这些内容就会以 Form Data 的形式提交给服务器,此时注意 Request Headers 中指定了 Content-Type 为 application/x-www-form-urlencoded,此时才能够以Form Data形式提交
 
 在爬虫中若是咱们要构造 POST 请求须要注意这几种 Content-Type,了解各类请求库的各个参数设置时使用的是哪一种 Content-Type,否则可能会致使 POST 提交后得不到正常的 Response。
 
六、Response
由服务端返回给客户端。Response 能够划分为三部分,Response Status Code、Response Headers、Response Body。
 
· Response Status Code
响应状态码,此状态码表示了服务器的响应状态,如 200 则表明服务器正常响应,301表明跳转,404 则表明页面未找到,500 则表明服务器内部发生错误。
 
· Response headers
内容类型,内容长度,服务器信息,设置cookie等
 
· Resposne Body
响应体,最重要的内容。响应的正文数据都是在响应体中,如请求一个网页,它的响应体就是网页的 HTML 代码,请求一张图片,它的响应体就是图片的二进制数据。
在作爬虫时主要解析的内容就是 Resposne Body,经过 Resposne Body 咱们能够获得网页的源代码、Json 数据等等,而后从中作相应内容的提取。
 

2.2 Web网页基础

一、网页组成
网页能够分为三大部分,HTML、CSS、JavaScript,HTML 定义了网页的内容和结构,CSS 描述了网页的布局,JavaScript 定义了网页的行为。
· HTML
网页包括文字、按钮、图片、视频等各类复杂的元素,其基础架构就是 HTML。不一样文件用不一样标签标示,而元素之间又经过div嵌套组合而成。
· CSS
层叠样式表
“层叠”是指当在 HTML 中引用了数个样式文件,而且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。
CSS是目前惟一的网页页面排版样式标准
结构:CSS选择器+样式规则
在网页中,通常会统必定义整个网页的样式规则,写入到 CSS 文件,其后缀名为 css,在 HTML 中只须要用 link 标签便可引入写好的 CSS 文件,这样整个页面就会变得美观优雅。
 · JavaScript
实现了一种实时、动态、交互的页面功能。JavaScript 一般也是以单独的文件形式加载的,后缀名为 js,在 HTML 中经过 script 标签便可引入。
二、网页结构
 
 
一个网页标准形式都是 html 标签内嵌套 head 和 body 标签,head 内定义网页的配置和引用,body 内定义网页的正文。
 
三、节点及节点关系
在 HTML 中,全部标签订义的内容都是节点,它们构成了一个 HTML DOM 树。
DOM,英文全称 Document Object Model,即文档对象模型。它定义了访问 HTML 和 XML 文档的标准:
W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它容许程序和脚本动态地访问和更新文档的内容、结构和样式。
 
W3C DOM 标准被分为 3 个不一样的部分:
- 核心 DOM - 针对任何结构化文档的标准模型
- XML DOM - 针对 XML 文档的标准模型
- HTML DOM - 针对 HTML 文档的标准模型
 
根据 W3C 的 HTML DOM 标准,HTML 文档中的全部内容都是节点:
- 整个文档是一个文档节点
- 每一个 HTML 元素是元素节点
- HTML 元素内的文本是文本节点
- 每一个 HTML 属性是属性节点
- 注释是注释节点
 
 
经过 HTML DOM,树中的全部节点都可经过 JavaScript 进行访问,全部 HTML 节点元素都可被修改,也能够被建立或删除。
节点树中的节点彼此拥有层级关系。咱们经常使用 parent(父)、child(子)和 sibling(兄弟)等术语用于描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。
 
            节点树及节点关系
 
四、选择器
CSS 选择器会根据不一样的节点设置不一样的样式规则
 
例如上例中有个 div 节点的 id 为 container,那么咱们就能够用 CSS 选择器表示为 #container,# 开头表明选择 id,其后紧跟 id 的名称。
另外若是咱们想选择 class 为 wrapper 的节点,即可以使用 .wrapper,. 开头表明选择 class,其后紧跟 class 的名称。
另外还有一种选择方式是根据标签名筛选,例如咱们想选择二级标题,直接用 h2 便可选择。如上是最经常使用的三种选择表示,分别是根据 id、class、标签名筛选,请牢记它们的写法。
 
另外 CSS 选择器还支持嵌套选择,各个选择器之间加上空格分隔开即可以表明嵌套关系,如 #container .wrapper p 则表明选择 id 为 container 内部的 class 为 wrapper 内部的 p 节点。
若是不加空格则表明并列关系,如 div#container .wrapper p.text 表明选择 id 为 container 的 div 节点内部的 class 为 wrapper 节点内部的 class 为 text 的 p 节点
还有一种比较经常使用的选择器是 XPath

2.3 爬虫基本原理

节点比做网页,连线比做网页之间链接关系。蜘蛛将整个网爬行到,抓取网站数据
 
一、爬虫概述
爬虫就是获取网页并提取和保存信息的自动化程序。
· 获取网页
网页源代码包含网页部分有用信息
最关键的部分就是构造一个 Request 并发送给服务器,而后接收到 Response 并将其解析出来
 
Python 里面提供了许多库来帮助咱们实现这个操做,如 Urllib、Requests 等,咱们能够用这些库来帮助咱们实现 HTTP 请求操做,Request 和 Response 均可以用类库提供的数据结构来表示,获得 Response 以后只须要解析数据结构中的 Body 部分便可。
· 提取信息
最通用的方法即是采用正则表达式提取,但比较复杂,容易出错
还有一些根据网页节点属性、CSS 选择器或 XPath 来提取网页信息的库,如 BeautifulSoup、PyQuery、LXML 等,使用这些库能够高效快速地从中提取网页信息,如节点的属性、文本值等内容。
提取信息使杂乱的数据变得清晰有条理,方便后续分析
· 保存数据
txt文本或json文本;数据库;或远程服务器
 
二、能爬怎样的数据
HTML 代码,Json 字符串
二进制数据,如图片、视频、音频等
各类扩展名的文件,如 CSS、JavaScript、配置文件等等
以上的内容其实都对应着各自的URL,是基于 HTTP 或 HTTPS 协议的,只要是这种数据爬虫均可以进行抓取。
 
三、JavaScript渲染页面
html多为空壳,网页被js渲染。用基本 HTTP 请求库获得的结果源代码可能跟浏览器中的页面源代码不太同样。可以使用 Selenium、Splash 这样的库来实现模拟 JavaScript 渲染

2.4 Session和Cookies

一、静态网页和动态网页
HTML 代码编写的,文字、图片等内容均是经过写好的 HTML 代码来指定的,这种页面叫作静态网页。
动态网页应运而生,它能够动态解析 URL 中参数的变化,关联数据库并动态地呈现不一样的页面内容。而是可能由 JSP、PHP、Python 等语言编写的。
动态网页可实现用户登陆注册的功能,凭证
 
二、无状态HTTP
缺乏状态记录,再次请求须要重复操做。
为了节约资源,保持HTTP链接状态, Session 和 Cookies出现。
Session 在服务端,也就是网站的服务器,用来保存用户的会话信息,Cookies 在客户端,也能够理解为浏览器端,有了 Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器经过识别 Cookies 并鉴定出是哪一个用户,而后再判断用户是不是登陆状态,而后返回对应的 Response。cookie保存了登陆凭证。
 
在爬虫中,有时候处理须要登陆才能访问的页面时,咱们通常会直接将登陆成功后获取的 Cookies 放在 Request Headers 里面直接请求,而没必要从新模拟登陆。
 
三、Session 会话
是指善始善终的一系列动做/消息。
在 Web 中 Session 对象用来存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,若是该用户尚未会话,则 Web 服务器将自动建立一个 Session 对象。当会话过时或被放弃后,服务器将终止该会话。
 
四、Cookies
某些网站为了辨别用户身份、进行 Session 跟踪而储存在用户本地终端上的数据。
 
· 会话保持
客户端第一次请求服务器,服务器会返回一个Headers中带有Set-Cookies字段的Response给客户端,用来标记用户,客户端保存。下次请求时,浏览器会把此Cookies 放到 Request Headers 一块儿提交给服务器,Cookies 携带了 Session ID 信息,服务器检查该 Cookies 便可找到对应的 Session 是什么,而后再判断 Session 来以此来辨认用户状态。
有效则保持登录,无效或过时则从新登陆
 
· 属性结构
name
value
max age: 失效时间
path
domain
size
http
secure
 
· 会话Cookie、持久Cookie
会话 Cookie 就是把 Cookie 放在浏览器内存里,浏览器在关闭以后该 Cookie 即失效,持久 Cookie 则会保存到客户端的硬盘中,下次还能够继续使用,用于长久保持用户登陆状态。
 
五、常见误区
关闭浏览器,服务器不会知道,所以也须要为服务器设置一个失效时间

2.5 代理基本原理

服务器检测的是某个 IP 单位时间的请求次数
设置代理,假装IP
一、基本原理
代理服务器, Proxy Server 代理网络用户去取得网络信息。
request和response都经过代理服务器进行中转
 
二、代理做用
突破自身 IP 访问限制
提升访问速度
方位一些单位或团体内部资源
隐藏真实ip
 
三、代理分类
 
  
根据匿名程度区分:
· 高度匿名
· 普通匿名
· 透明匿名
...
 
四、常见代理设置
免费、付费、ADSL拨号
 

##本系列内容为《python3爬虫开发实战》学习笔记。本系列博客列表以下:css

(零)学习路线html

(一)开发环境配置python

(二)爬虫基础正则表达式

(三)基本库使用数据库

(四)解析库使用json

(五)数据存储浏览器

(六)Ajax数据爬取安全

(七)动态渲染页面爬取Selenium服务器

持续更新...cookie

对应代码请见:..