什么是网络爬虫?

网络爬虫(Web crawler)一般被用来采集网络上的信息,也叫做网络铲(Web scraper),网络蜘蛛(Web spider)。顾名思义,网络爬虫就是先爬到要采集的网页上,然后对数据信息进行采集。

需要什么步骤?

1. 了解爬虫的工作原理

2. http抓取工具

3. 高级功能

相关概念

1. 互联网简介

互联网最早是作为科研信息的一种交流方式,而现在互联网需要处理的内容则变得越来越多,其所涉及到的技术也越来越复杂。

尽管互联网的多层结构(OSI模型)很复杂,但是其本质仍然是由一组组消息组成的。一些消息用于消息请求,一些消息用于消息响应,还有一些消息则包含有发给机器的某个应用程序的文件信息和指令。这些请求通过互联网从一个位置(客户端)发送到另一个位置(服务端),循环不止。

这里用一个例子对上面提到的过程进行简单的描述。A为服务器,B为客户端,当B想要连接到A时,会发生下面的行为:

a. B发送一连串的二进制数据,这些数据构成了一种信息,信息中包含了请求头和消息体。请求头中则包含了B的本地路由器MAC地址和A的IP地址。消息体则包含了B对A的应用的请求。

b. B的本地路由器收到所有的二进制数据,并将这些数据打包(packet),从B自己的MAC地址发送到A的IP地址中。B的路由器将数据包加上自己的IP地址作为发送地址,通过互联网将数据进行发送。

c. A在自己的IP地址收到了数据包。

d. A读取数据请求头中的目标端口(通常是网络应用的80端口),然后将它传递到对应的网络服务器应用上。

e. 网络服务器应用从服务器处理器收到数据,数据显示为:

这是一个get/post请求

请求文件为xxx.html

f. 网络服务器引用找到对应的html文件,并将之打包为一个新的数据包发送给B,然后通过它的本地路由器发送出去并被B接收。

同时,互联网中还存在着不同的通信方式,并通过不同的协议或语言对通信方式进行控制。比如可以通过SMTP协议手法邮件、通过VOIP协议打电话、通过FTP上传邮件。每个协议都为请求头定义了不同的字段, 采用不同的数据编码、手法地址或名称,以及其它数据类型。而用于网站信息的请求、发送和接收的协议则是HTTP(Hypertext Transfer Protocol,超文本传输协议)。

2. 超文本传输协议

上面提到,超文本传输协议是用于网站信息的请求、发送和接收。一个HTTP消息主要包括两个部分:头字段(header field)和数据字段(data field)。每个头字段都由一对标题和值组成(类似于python中的字典)。这些字段的标题是HTTP标准中预先定义的。在一个HTTP数据包中可能会出现60多中头字段,使用比较多的为:

名称

描述

示例

User-Agent

字符串,表示发出请求的浏览器和操作系统信息

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0

Cookie

变量,被网络应用用来存储会话数据和其他信息

“_utma:20549163.147923691.1398729710.13

98729710.1398858679.2”

Status

 

代码,表示网页请求成功与否

“200”(成功),“404”(文件未找到)

当HTTP从浏览器收到一个数据包时,数据包的内容一定被看作是一个网站。网站的结构由HTML(HyperText Markup Language,超文本标记语言)构成。

3. 超文本标记语言

HTML用包含标记的文本文件来告诉浏览器怎么显示整个页面,HTML文件的扩展名为htm或html。

下面用一个简单示例说明一下HTML文件的结构,新建文本文档,输入下述语句,并保存文档格式为htm或html:

<html>
<head>
   <title>The title of the page</title>
</head>
   <body>
      Helll,world
   <b>Display:bold</b>
   </body>
</html>

打开该HTML文件,就能够在浏览器中看到该网页。上述文档中的信息有:

a. 第一个标签为<html>,该标签告诉浏览器此处为HTML文档的起始位置,HTML文档的最后一个标签为</html>,该标签告诉浏览器此处为HTML文档的终止位置。

b. 在<head>和</head>标签之间的为头信息。在浏览器界面中,头信息不被显示。

c. 在<title>和</title>标签之间的为文档标题,显示在浏览器窗口的标题栏。

d. 在<body>和</body>标签之间的为正文,会被显示在浏览器中。

e. 在<head>和</head>标签之间的文本会被加粗显示。

HTML文档中还包含几个概念:

a. HTML元素:HTML文档是由HTML元素定义的,指的是从开始标签到结束标签的所有代码。

HTML元素以开始标签起始

HTML元素以结束标签终止

元素的内容是开始标签与结束标签之间的内容

某些 HTML 元素具有空内容

空元素在开始标签中进行关闭(以开始标签的结束而结束)

大多数 HTML 元素可拥有属性

b. HTML 标签:HTML 标签用来组成HTML元素。

HTML标签两端有两个包括字符:“<”和“>”,这两个包括字符被称为角括号。

HTML标签通常成对出现,比如<b>和</b>。前面一个是开始标签,第二个是结束标签,在开始和结束标签之间的文本是元素内容。

HTML标签是大小写无关的,<b>跟<B>表示的意思相同。

c. HTML 属性:属性为 HTML 元素提供附加信息。

HTML标签可以拥有属性。属性提供了有关HTML元素的更多的信息。

属性总是以名称/值对的形式出现,比如:name="value"。

属性总是在 HTML 元素的开始标签中规定。

属性例子 1:

<h1> 定义标题的开始。

<h1 align="center"> 拥有关于对齐方式的附加信息。

属性例子 2:

<body> 定义 HTML 文档的主体。

<body bgcolor="yellow"> 拥有关于背景颜色的附加信息。

属性例子 3:

<table> 定义 HTML 表格。

<table border="1"> 拥有关于表格边框的附加信息。

属性例子 4:

 <a> 定义HTML 链接,链接的地址在 href 属性中指定。

<a href="http://www.w3school.com.cn">This is a link</a>拥有关于链接地址的附加信息

4. 层叠样式表

CSS(Cascading Style Sheets,层叠样式表)是配合HTML对网站进行定义的语言。CSS可以为网站对象定义颜色、位置、尺寸、和背景色等属性。样式通常保存在外部的 .css 文件中。通过仅仅编辑一个简单的 CSS 文档,外部样式表使你有能力同时改变站点中所有页面的布局和外观。

5. 高级功能

在简单实现爬虫之后,就要对数据进行某些处理,比如要对数据进行清洗、过滤、提取、存储,之后可能还要提高数据爬取的效率,比如利用分布式,集群式的爬取策略等。