网络爬虫
这一部分的内容是,从网络上爬取数据。
本部分内容将分为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的头部区域,
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协议 。转载请注明出处!