Python网络爬虫(一)——什么是爬虫
什么是网络爬虫?
网络爬虫(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协议手法邮件、t通过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. 高级功能
在简单实现爬虫之后,就要对数据进行某些处理,比如要对数据进行清洗、过滤、提取、存储,之后可能还要提高数据爬取的效率,比如利用分布式,集群式的爬取策略等。
参考资料:
1. 崔庆才博客:https://cuiqingcai.com/927.html
2. Python网络数据采集:https://baike.baidu.com/item/Python%E7%BD%91%E7%BB%9C%E6%95%B0%E6%8D%AE%E9%87
下一篇: threejs坐标转换教程