1. 爬虫基础

爬虫基础

HTTP基本原理

URI和URL

  • URI(Uniform Resource Identifer):统一资源标识符
  • URL(Uniform Resource Locator):统一资源定位符
  • URL是URI的子集

超文本

  • 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本

网络协议类型:HTTP和HTTPS

  • HTTP(Hyper Text Transfer Protocol):超文本传输协议,是用于从网络传输超文本数据到本地浏览器的传送协议
  • HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer):以安全为目标的HTTP通道

HTTPS的安全基础是SSL,主要作用为建立一个信息安全通道保证数据传输的安全和确认网站的真实性

  • 其他网络协议还包括 ftp、sftp、smb 等

HTTP请求过程

  1. 向浏览器输入URL
  2. 浏览器向服务器发送请求
  3. 服务器对请求进行处理和解析,返回对应的响应
  4. 浏览器对服务器返回的响应进行解析,呈现页面
  • 浏览器开发者工具

请求

请求由客户端向服务端发出,分为请求方法(Requests Method)、请求地址(Requests URL)、请求头(Requests Head)和请求体(Requests Body)。

请求方法

方法 描述
GET 请求页面,并返回页面内容
HEAD 类似于GET请求,区别在于其返回的响应中没有具体内容,用于获取报头
POST 大多用于提交表单或上传文件,数据包含在请求体中
PUT 从客户端向服务器传送的数据取代指定文档中的内容
DELETE 请求服务器删除指定的页面
CONNECT 把服务器当作跳板,让服务器代替客户端访问其他网页
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断
  • 常见的请求方法有GET和POST两种
  • GET请求中的参数包含在URL内,数据可通过URL看到;POST请求的参数包含在请求头中,不会在URL内体现
  • GET请求提交的数据最多只有1024字节,而POST方式没有限制

请求地址

  • 请求的地址,即统一资源定位符URL

请求头

请求头,用于说明服务器要使用的附加信息

  • Accept:请求报头域,用于指定客户端可接受哪些信息
  • Accept-Language:指定客户端可接受的语言类型
  • Accept-Encoding:指定客户端可接受的内容编码
  • Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务或网关的位置
  • Coocies:网站为了辨别用户进行会话跟踪而储存在用户本地的数据,主要功能是维持当前会话
  • Referer:标识请求来源页面
  • User-Agent:简称UA,可使服务器识别客户使用的操作系统及版本、浏览器及版本信息(爬虫可利用此信息伪装浏览器)
  • Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型(Mime-Type),在HTTP协议消息头中表示具体请求中的媒体类型信息(例如text/html代表HTML格式more

请求体

  • GET请求的请求体为空
  • POST请求的请求体一般承载的内容是请求中的表单数据
Content-Type POST提交数据的方式
application/x-www-form-urlencoded 表单数据
multipart/form-data 表单文件上传
application/json 序列化JSON数据
text/xml XML数据

响应

响应由服务端返回给客户端,分为响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)。

响应状态码

响应状态码表示服务器的响应状态

状态码 说明 详情
100 继续 请求者应当继续提出请求。服务器已收到请求的一部分,正在等待其余部分
101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换
200 成功 服务器已成功处理了请求
201 已创建 请求成功并且服务器创建了新的资源
202 已接受 服务器已接受请求,但尚未处理
203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一个源
204 无内容 服务器成功处理了请求,但未返回任何内容
205 重置内容 服务器成功处理了请求,内容被重置
206 部分内容 服务器成功处理了部分请求
300 多种选择 针对请求,服务器可进行多种操作
301 永久移动 请求的网址已永久移动到新位置,即永久重定向
302 临时移动 请求的网页暂时跳转到其他页面,即暂时重定向
303 查看其他位置 如果原来的请求是POST,重定向目标文档应该通过GET提取
304 未修改 此次请求返回的网页未修改,继续使用上次的资源
305 使用代理 请求者应该使用代理访问该网页
307 临时重定向 请求的资源临时从其他位置相应
400 错误请求 服务器无法解析该请求
401 未授权 请求没有进行身份验证或身份验证未通过
403 禁止访问 服务器拒绝此请求
404 未找到 服务器找不到请求网页
405 方法禁用 服务器禁用了请求中指定的方法
406 不接受 无法使用请求的内容响应请求的网页
407 需要代理授权 请求者需要使用代理授权
408 请求超时 服务器请求超时
409 冲突 服务器在完成请求时发生冲突
410 已删除 请求的资源已永久删除
411 需要有效长度 服务器不接受不含有效内容长度标头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的其中一个前提条件
413 请求实体过大 请求实体过大,超出服务器的处理能力
414 请求URL过长 请求网址过长,服务器无法处理
415 不支持类型 请求格式不被请求页面支持
416 请求范围不符 页面无法提供请求的范围
417 未满足期望值 服务器未满足期望请求标头字段的要求
500 服务器内部错误 服务器遇到错误,无法完成请求
501 未实现 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
503 服务不可用 服务器目前无法使用
504 网关超时 服务器作为网关或代理,没有及时从上游服务器收到请求
505 HTTP版本不支持 服务器不支持请求中所用的HTTP协议版本

响应头

响应头包含了服务器对请求的应答信息

  • Date:标识响应产生的时间
  • Last-Modified:指定资源的最后修改时间
  • Content-Ecoding:指定响应内容的编码
  • Server:包括服务器的信息,如名称、版本号等
  • Content-Type:文档类型
  • Set-Cookie:设置Cookies。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求
  • Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中

响应体

响应的正文数据在响应体中

  • 浏览器开发者工具“preview”中可预览网页源代码,即响应体的内容。这也是爬虫解析的目标

网页基础

网页的组成

网页可分为三大部分:HTML、CSS和JavaScript,HTML定义网页的内容结构、CSS描述网页的布局、JavaScript定义了网页的行为

HTML

  • HTML(Hyper Text Markup Language)即超文本标记语言
  • 不同的元素通过不同的标签标示,这些标签定义的节点元素相互嵌套和组合形成了复杂的层次关系,形成了网页的架构

CSS

  • CSS(Cascading Style Sheets)即层叠样式表,是目前惟一的网页页面排版样式标准,能够对网页中元素位置的排版进行像素级精确控制

JavaScript

  • JavaScript简称JS,是一种脚本语言,用来给HTML网页增加动态功能

网页的结构

  • 一个网页的标准形式是html标签内嵌套head和body标签,head标签内定义网页的配置和引用,body标签定义网页的正文

节点树

在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树

  • DOM(Document Object Model)即文档对象模型,是W3C的标准,它定义了访问HTML和XML文档的标准
  • 文档对象模型是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式

W3C DOM标准被分为3个不同的部分

  1. 核心DOM:针对任何结构化文档的标准模型
  2. XML DOM:针对XML文档的标准模型
  3. HTML DOM:针对HTML文档的标准模型

根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点

  • 整个文档是一个文档节点
  • 每个HTML元素是元素节点
  • HTML元素内的文本是文本节点
  • 每个HTML属性是属性节点
  • 注释是注释节点

HTML DOM将HTML文档视为树结构,这种结构被称为节点树

  • 节点树中的节点彼此拥有层级关系,父节点(parent)拥有子节点(child),同级的节点被称为兄弟节点(sibling)
  • 节点树中,顶端节点称为根(root),除了跟节点外每个节点都有父节点,同时可拥有任意数量的子节点或兄弟节点

选择器

CSS选择器用于定位节点

  • 开头(#id)代表选择id,其后紧跟id的名称

  • .开头(.class)代表选择class,其后紧跟class的名称
  • element 是根据标签名筛选
  • CSS选择器支持嵌套选择,各个选择器之间加空格可代表嵌套关系,若不加空格则代表并列关系

爬虫的基本原理

爬虫就是获取网页提取保存信息的自动化程序

  • 基于HTTP或HTTPS协议的URL对应的数据,爬虫皆可抓取

  • 由JavaScript渲染的网页,可分析其后台Ajax接口,或使用Selenium、Splash等库来模拟JavaScript渲染

会话和Cookies

  • 静态网页:静态网页是文字、图片等内容均通过既定的HTML代码指定的页面
  • 动态网页:动态网页是可动态解析URL中参数的变化,管理数据库并动态呈现不同的内容的页面
  • 无状态HTTP:HTTP的无状态是指HTTP协议对事务的处理缺少状态记录,服务器不会记录请求过程前后的状态变化
  • 会话:在Web中会话对象用来存储特定用户会话所需的属性及配置信息
  • Cookies:Cookies是指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据

Cookies的属性结构

  • Name:Cookie的名称,一旦创建便不可修改
  • Value:Cookie的值
  • Domain:可以访问Cookie的域名
  • Max Age:Cookie失效时间
  • Path:Cookie的使用路径,如果设置为/,则本域名下所有页面都可以访问该Cookie
  • Size字段:Cookie的大小
  • HTTP字段:Cookie的httponly属性,若为true,则只有在HTTP头中会带有此Cookie信息,而不能通过document.cookie来访问该Cookie
  • Secure:该Cookie是否被使用安全协议传输

代理的基本原理

代理服务器(proxy server)的功能是代理网络用户去取得网络信息。

代理的作用

  • 突破自身IP访问限制
  • 访问某些内部资源
  • 提高访问速度
  • 隐藏真实IP
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容