网络爬虫

这一部分的内容是,从网络上爬取数据。
本部分内容将分为5部分:网络爬虫的基础知识,网络请求,数据解析,数据存储与展示以及Scrapy。其中,最重要的是Scrapy,其满足了现在爬虫的要求。
整个部分的知识模块如下:

第一部分:网络爬虫的基础知识

本部分将由3板块构成,结构如下:

这三部分分别是:网页的基本组成,http协议以及爬虫的相关概念。

Part 1:网页的基本组成

这部分将对网页的基础知识进行补充,以便于后续的网页数据的提取。

1.1 网页的基本结构
首先给出一个网页的基本形式,如下图:

完整HTML包括html DOCTYPE声明、title标题、head、网页编码声明等内容。
a. html DOCTYPE声明
DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本,是标准化网页内容所需要的。所给示例的图片中,<!DOCTYPE html>就是html DOCTYPE声明。
b. head
<head></head>标签用于标识HTML的头部区域,和之间的内容都属于头部区域中的内容,主要包括一些网页相关的信息,如网页标题、字符集、网页描述等信息,还可以包括script代码等。示例中,head包含了meta, title等内容。
c. title
title显示的是网页打开之后,页标签的显示内容。例如:

d. meta
<meta>标签用来定义文档的元数据,使用“名称=值”的形式。一般使用它来描述当前页面的特性。提供有关页面的元信息,页面编码、刷新跳转、描述、更新频度等内容。示例中,meta描述了name和content的两组实例。
e. body
<body></body>是放置页面内容的地方,所有需要在浏览器窗口中显示的内容都需要放置在标签对之间。
f. html
<html></html>标签是HTML页面中所有标签的顶层标签,一个页面有且只有一对该标签,页面中的所有标签和内容都必须放在标签对之间。

1.2 标签的标准格式
不同的加载内容,有不同的标准格式。
a. 注释
形式:<!--string-->其中,string是注释的内容;
b. Meta
例如,示例中的<meta charset="UTF-8">表示使用的编码方式是utf-8.
meta的内容都是放在与<meta >中的。
c. body, html, head, title等
这些标签的形式都是<body>表示开始,</body>表示结束。它们中间的部分就表示这个模块的内容。
d. div标签
div定义文档中的分区或节,采用的格式也是<div> </div>
e. a标签
a标签一般用于定义超链接,格式:<a> </a>
f. img标签
img标签一般用于表示所使用的的图片的连接,格式:<img src = ' '>
g. table标签
table标签一般用于表示输入的表格,格式: <table> </table>。一般情况下,table标签定义在表格外围,tr用于在表格内定义属性。

1.3 树形结构
html文本是有格式的。以上面的例子来看, 最外面整体上的结构是html,下面又包含了head和body两部分。其中,head又包含了meta,title等4个内容。将上述结构画成树状图,如下:

树形结构将会有助于我们遍历这个html文件。

Part 2:http协议

http协议主要是讲我们如何访问网页的。
2.1 网络申请的响应过程
a. 浏览器通过DNS找到url对应的服务器,查找域名对应的ip地址;
b. 向目标地址的ip发送请求;
c. web服务器响应请求,返回html页面;
d. 浏览器解析html页面,并在显示端显示出来。

2.2 url的分解(发了什么)
url的格式为:
scheme://host:port/path/?query-string = xxx # anchor
其中,scheme表示访问的协议,一般为http,https,ftp等;
host表示主机口,域名,例www.baidu.com;
port表示端口号,当访问一个服务器的时候,端口号默认为80;
path表示查找路径,指的是资源在服务器上的位置;
query-string表示要查询的字符串;
anchor表示锚点,也就是当前模块在页面上的第几部分。

2.3 常用的请求方法(怎么发送的请求)
常用的请求方法有以下8种:

其中,比较常用的有两种:post和get。

2.4 请求头(发送过去,服务器怎么识别)
为了使得服务器知道这个页面请求是谁发来的,http协议会给请求加上请求头。常用的请求头参数如下:
a. User-Agent:浏览器名称;
b. Referer:表名当前这个请求是从哪个url过来的;
c. Cookie:用于区分不同的访问者;

2.5 常见的响应代码(服务器识别之后,怎么响应)
当资源访问申请被提交给服务器之后,服务器会返回一个响应代码,用于描述当前的状态。常用的响应代码如下:
200:正常访问;
301:永久重定向;
302:临时重定向;
400:请求的内容在服务器上找不到;
403:服务器拒绝访问;
500:服务器内部错误。

2.6 Chrome抓包工具(这个过程的调试工具)
针对chrome浏览器,这里使用“右键-检查”来获取当前页面的调试工具。
elements表示这个页面上显示的内容,当选中某一块的时候,会在页面上高亮提示,非常方便地帮助我们快速选择代码模块;
sources表示当前页面下内容的存储路径;
network通过抓取刷新页面时,不同资源的类型,大小,名字,状态等信息,能让我们对抓取与报错有非常直观的认识。

Part 3:爬虫的基本知识

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

网络爬虫的作用:
a. 抓取网页;
b. 数据存储;
c. 预处理;
d. 排名,提供检索服务等;

网络爬虫的分类:
a. 按照目标来分:聚焦爬虫和通用网络爬虫;
聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息; 通用爬虫的目标性则不强,能够访问页面上的所有信息;
b. 按照规模来分:
小规模爬虫:主要爬取网页,速度不快;
中规模爬虫:爬取网站或者系列网站,对于速度有要求;
大规模爬虫:爬取全站,建立搜索引擎。

网络爬虫的目标:在质量上,模拟用户通过浏览器对网页信息的获取;在速度上,越快越好。

网络爬虫的风险:服务器上的数据有产权归属,若将网络爬虫爬取的数据用于牟利,可能存在法律风险。
如何避免呢?要遵循robots协议。

Robots协议是用来告诉爬虫哪些资源可以爬,哪些资源不可以爬。以京东的robots为例:

```
User-agent: *                   # 表示所有人都可以爬
Disallow: /?*                   # 但是不允许访问根节点中以?开头的路径
Disallow: /pop/*.html           # 不允许访问/pop/下面的html内容
Disallow: /pinpai/*.html?*      # 不允许访问/pinpai/下的html扩展内容
User-agent: EtaoSpider          # 这个和下面四个是恶意爬虫
Disallow: / 
User-agent: HuihuiSpider 
Disallow: / 
User-agent: GwdangSpider 
Disallow: / 
User-agent: WochachaSpider 
Disallow: /


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!