爬虫基础(http请求和html结构)

要使用selenium还是使用其他方式抓取网页的内容,都必须对网页的架构比较熟悉。我们来看看如何定位网页的内容。

首先我们先尝试解析URL,看看下面这个URL地址:

http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere

url:协议 + 域名/IP + 端口 + 路由 + 参数

我们来解析一下就能知道的很清楚。

协议:http

域名:www.x2y2.com

端口:80

路由:/fisker/post/0703/window.location.html

参数:?ver=1.0&id=6    #传递给服务器的参数

锚点:#imhere

ps:最后一个概念锚点就是指定了html中的特定位置

如这个html中就设置一个锚点链接<a href="#miao">去找喵星人</a>;(注意:href属性的属性值最前面要加#)

http的请求和响应

我们打开www.baidu.com这个网址,并用Chrome为例来讲解抓包,windows下用F12来调出开发者模式来审查网页元素。

爬虫基础(http请求和html结构)

注意看到点击network;下面一栏选择Preserve log来保留跳转时之前的日志。

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

ps:这里重点讲解一下Preserve log。有时候你点击一个链接。浏览器发出n个请求,然后跳转到了另外一个页面。这个时候有进行了一个新的请求。勾选这个选项工具就会保存你跳转之前的请求。

1.请求

点选ALL查看所有的网络请求。可以看到左下角共有18项请求。而其实我打开的这个网页只是www.baidu.com.

点击选择第一个请求。一般来说第一个请求是主页面的请求。页面就会变成这样。

爬虫基础(http请求和html结构)

      由客户端向服务端发出,可以分为 4 部分内容:请求方法( Request Method ) 、 请求的网址( Request URL )、请求头( Request Headers ) 、 请求体( Request Body )。

1.请求方法:

爬虫基础(http请求和html结构)

2.请求网址:

请求的网址,即统一资惊定位符 URL ,它可以唯一确定我们想请求的资源。

3.请求头:

请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie 、 Referer 、 User-Agent 等 。
下面简要说明一些常用的头信息 。
Accept :请求报头域,用于指定客户端可接受哪些类型的信息 。
Accept-Language :指定客户端可接受的语言类型 。
Accept-Encoding :指定客户端可接受的内容编码 。
Host :用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。 从 HTTP 1. l 版本开始,请求必须包含此内容。


Cookie :也常用复数形式 Cookies ,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据 。 它的主要功能是维持当前访问会话 。 例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是 Cookies 的功劳 。 Cookies 里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookies 并将其发送给服务器,服务器通过 Cookies 识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容 。


Referer :此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等 。
User-Agent :简称 UA ,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本 、 浏览器及版本等信息 。 在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别州为爬虫 。


Content-Type :也叫互联网媒体类型( Internet Media Type )或者 MIME 类型,在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息 。 例如, text/html 代表 HTML 格式,image/gif代表 GIF 图片, app lication/jso n 代表 JSON 类型,更多对应关系可以查看此对照表 :http://tool.oschina.neνcommons 。
因此,请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头 。

4.请求体:

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

爬虫基础(http请求和html结构)

  在爬虫中,如果要构造 POST 请求,需要使用正确的 Content-Type ,并了解各种请求库的各个参数设置时使用的是哪种 Content-Type , 不然可能会导致 POST 提交后无法正常响应 。

2.响应

      响应,由服务端返回给客户端,可以分为三部分:响应状态码( Response Status Code )、响应头( Response Headers )和响应体( Response Body )。
1. 晌应状态码
      响应状态码表示服务器的响应状态,如 200 代表服务器正常响应, 404 代表页面未找到, 500 代表服务器内部发生错误。 在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为 200 ,则证明成功返回数据 , 再进行进一步的处理,否则直接忽略。 表 2-3 列州了常见的错误代码及错误原因

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--信息不完整需要进一步补充

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

具体错误代码可以找度娘问。。。。。。

2. 晌应头
响应头包含了服务器对请求的应答信息,如 Content-Type 、 Server 、 Set-Cookie 等。 下面简要说明一些常用的头信息 。
Date : 标识响应产生的时间 。
Last-Modified : 指定资源的最后修改时间 。
Content-Encoding : 指定响应 内容的编码 。
Server : 包含服务器的信息 ,比如名 称 、版本号等 。
Content-Type : 文档类型 ,指定返回的数据类型是什么 ,如 text/htm l 代表返回 HTML 文档,
application/x-javascript !J!U代表返回 JavaScript 文件, image/jpeg 则代表返回图片 。
Set-Cookie : 设置 Cookies 。 响应头 中的 Set-Cooki e 告诉浏览器需要将此内容放在 Cookies
中 , 下次请求携带 Cookies 请求 。
Expires: 指定响应的过期时间 , 可以使代理服务器或浏览器将加载的 内容更新到缓存巾 。 如
果再次访问时,就可 以直接从缓存中加载, 降低服务器负载,缩短加载时间 。
3 . 晌应体
    最重要的当属响应体的内容了 。 响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的 HTML 代码 ; 求一张图片时 , 它的响应体就是图片的二进制数据 。 我们做爬虫请求网页后,要解析的 内容就是响应体 ,如图 2-8 所示 。

爬虫基础(http请求和html结构)

html结构

1.网页的组成

      网页可 以分为三大部分HTML , CSS 和 JavaScript。 如果把网页 比作一个人的话 ,HTML 相当于骨架,JavaScript 相当于肌肉 ,css 相当于皮肤,三者结合起来才能形成一个完善的网页 。 下面我们分别来介绍一下这三部分的功能。
1. HTML
      HTML 是用来描述网页的一种语言 , 其全称叫作 Hyper Text Markup Language ,即超文本标记语言 。 网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是 HTML 。 不同类型的文字通过不同类型的标签来表示 ,如图片用 img 标签表示, 视频用 video标签表示 ,段落用 p 标签表示 ,它们之间的布局又常通过布局标签 div 嵌套组合而戚 ,各种标签通过不同的排列和嵌套才形成了网页的框架。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>This is a Demo</title>
</head>
<body>
<d iv id=” container”>
<div class=、rapper”〉
<h2 class =”title ”>Hello World</h2>
<p class =” text ”> Hell口, this is a paragraph.</p>
</div>
</div >
</body>
</html>

ps:常见的标签
<div> 标签定义 HTML 文档中的一个分隔区块或者一个区域部分。

<span> 元素是内联元素,可用作文本的容器。

无序列表始于 <ul> 标签。每个列表项始于 <li>。

自定义列表以 <dl> 标签开始。每个自定义列表项以 <dt> 开始。每个自定义列表项的定义以 <dd> 开始。

具体更多的标签可以参见http://www.w3school.com.cn/tags/html_ref_byfunc.asp

2. CSS
   HTML 定义了网页的结构,但是只有 HTML 页面的布局并不美观,可能只是简单的节点元素的排列,为了让网页看起来更好看一些,这里借助了 css 。css ,全称叫作 Cascading Style Sheets ,即层叠样式表 。 “层叠”是指当在 HTML 中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。 “样式”指网页中文字大小 、 颜色 、元素间距、排列等格式。
css 是目前唯一的网页页面排版样式标准,有了它的帮助,页面才会变得更为美观。图 2-9 的右侧即为 css ,例如:
#head_wrapper.s-ps-islite .s-p-top {
position: absolute;
bottom: 40px;
width: 100%;
height: 181px;
就是一个 css 样式 。 大括号前面是一个 css 选择器。 此选择器的意思是首先选中 id 为 head_wrapper且 class 为 s-ps-islite 的节点,然后再选中其内部的 class 为 s-p-top 的节点 。 大括号内部写的就是一条条样式规则,

例如 position 指定了这个元素的布局方式为绝对布局,

bottom 指定元素的下边距为40 像素,

width 指定了宽度为 100% 占满父元素,

height 则指定了元素的高度 。

也就是说,我们将位置 、 宽度、高度等样式配置统一写成这样的形式,然后用大括号括起来,接着在开头再加上 css 选择
器,这就代表这个样式对 css 选择器选中的元素生效,元素就会根据此样式来展示了 。在网页中,一般会统一定义整个网页的样式规则,并写人 css 文件中(其后缀为 css )。 在 HTML中,只需要用 link 标签即可引人写好的 css 文件,这样整个页面就会变得美观 、 优雅。

3. JavaScript
JavaScript ,简称 JS , 是一种脚本语言 。 HTML 和 css 配合使用, 提供给用户的只是一种静态信息,缺乏交互性。 我们在网页里可能会看到一些交互和动画效果,如下载进度条、提示框 、 轮播图等 ,这通常就是 JavaScript 的功劳。 它的出现使得用户与信息之间不只是一种浏览与显示的关系,而是实现了一种实时、动态、交互的页面功能 。JavaScript 通常也是以单独的文件形式加载的,后缀为 js ,在 HTML 中通过 script 标签即可引入,例如:
<script src: "jquery-2 .1. o.j s" ></script>
综上所述, HTML 定义了网页的内容和结构, css 描述了网页的布局, JavaScript 定义了网页的行为 。
以上就是html的基础。以后会讲解如何使用xpath和css,正则式来定位页面元素。欢迎交流[email protected]