一、基本问题
1. 爬虫是什么?
爬虫通常是网络爬虫的简称,是一种按照一定的规则,自动地请求并抓取网页信息的程序或者脚本。
2. 爬虫能做什么?
只要能通过浏览器访问的数据都可以通过爬虫抓取。例如:文本、图片、视频等数据。
3. 爬虫的工作原理
模拟浏览器访问网页,获取网页中指定的数据。
- 浏览器访问网页的过程:
当你在浏览器中输入地址后,经过DNS服务器找到服务器主机,向服务器发送一个请求,服务器经过解析后发送给用户浏览器结果,包括html,js,css等文件内容,浏览器解析出来最后呈现给用户在浏览器上看到的结果。
- 实践
使用浏览器查看访问网页的过程
二、爬虫分类
-
通用爬虫
无差别收集数据,提取关键字,并建立索引库。例如:搜索引擎,Google、Baidu、微软都有自己的爬虫。
-
聚焦爬虫
针对特定的网站和特定内容采集数据。我们通常写的就是这类爬虫。
三、爬虫的基本流程
爬虫的基本流程本质就是模拟浏览器访问网页的过程。
-
发起请求
向目标站点发起请求(Request
),请求可能包含额外的header
等信息,然后等待服务器响应。 -
获取响应
服务器接受到请求后,返回一个正常响应(Response
),响应的内容就是页面内容。响应类型主要是HTML、JSON字符串、二进制数据(图片、视频、音频、pdf、word)等。 -
解析内容
根据响应内容类型的不同,处理方式也是不同的。No. 类型 处理方式 1 HTML 使用正则表达式或者页面解析库进行解析 2 JSON 直接转换为JSON对象解析 3 二进制数据 保存或者进一步的处理 -
保存数据
根据响应内容类型的不同,保存形式也是不同的。No. 类型 保存形式 1 HTML、JSON 保存成文本(csv、xml、html) 2 二进制数据 保存特定格式的文件 3 所有格式 保存到数据库
四、Robots协议
特指网站中robots.txt文件,告诉爬虫什么可以爬取(Allow
),什么不可以爬取(Disallow
)。
- 如何查看网站的
robots.txt
?
例如域名/robots.txt
https://www.baidu.com/robots.txt https://www.bilibili.com/robots.txt https://www.taobao.com/robots.txt
理论很枯燥,但是理论指导实践。
五、请求(Request
)与响应(Response
)
请求与响应
- 请求(
Request
):浏览器发送消息给网站服务器的过程。 - 响应(
Response
):服务器收到浏览器发送的消息后,根据浏览器消息内容做相应的处理,然后把消息回传给浏览器的过程。
请求(Request
)和响应(Response
)就是浏览器与服务器之间通信。我们日常通信方式有信件和Email。
信封格式
书信格式
Email格式
1. 请求(Request
)
格式
实例
请求(Request
)通常主要关注四部分:请求方式、请求URL、请求头、请求体
- 请求方式
请求方式常用的主要有两种方式:GET
和POST
-
GET
:向指定的资源发出显示请求。
使用GET
方法应该只用在读取数据(查),而不应当被用于产生副作用的操作中(增删改)。 -
POST
:向指定资源提交数据,请求服务器进行处理。
(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
-
案例
No. | GET |
POST |
---|---|---|
1 | Baidu | 登录、注册 |
2 | 浏览商品 | 购买商品 |
重点
GET
和POST
的区别就是:GET
的请求数据在URL中,POST
则是存放在请求体中。
注意:重点问题答不上来会被面试官鄙视,甚至有些面试官以此为由被Pass掉。
-
请求URL
URL(统一资源定位符 Uniform / Universal Resource Locator),是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。通常等同于网址,是我们访问网站资源的地址。-
基本格式
scheme://host[:port#]/path/…/[?query-string][#anchor]
-
构成
URL的格式由以下几个部分组成:No. 构成 说明 1 scheme
协议(例如: http
,https
,ftp
)2 host
服务器的IP地址或者域名 3 port
服务器的端口(http默认端口 80
)4 path
访问资源的路径 5 query-string
参数,发送给http服务器的数据 6 anchor
锚(跳转到网页的指定锚点位置) -
实践
https://www.baidu.com/s?wd=ABC
-
-
请求头
请求头包含请求时的头部信息,如User-Agent
,Host
,Cookies
等信息 -
请求体
请求体是请求信息数据,如提交表单数据时候的表单数据。
实践
使用浏览器查看百度搜索时的请求(Request
)信息。
2. 响应(Response
)
格式
实例
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态码,以及描述状态的短语,彼此由空格分隔。
响应(Response
)通常主要关注响应状态、响应头和响应体三部分。
-
响应状态
响应状态是用3位数字组成的状态码表示。主要分为以下五类:No. 状态码 分类 说明 1 1xx
信息响应 请求已被服务器接收,继续处理 2 2xx
成功响应 请求已成功被服务器接收、理解、并接受 3 3xx
重定向 需要后续操作才能完成这一请求 4 4xx
客户端错误 请求含有词法错误或者无法被执行 5 5xx
服务器错误 服务器在处理某个正确请求时发生错误 几个重要状态码与状态短语
No. 状态码与状态短语 说明 1 200 OK
代表成功 2 301 Moved Permanently
跳转 3 404 Not Found
找不到页面 4 502 Bad Gateway
服务器错误 更多状态码参照HTTP响应代码
-
响应头
响应头主要包含内容类型,类型的长度,服务器信息,设置Cookie
。 -
响应体
响应体包含请求资源的内容,如网页HTML、JSON文本、二进制数据(图片、音频、视频)等。
练习
使用浏览器查看百度搜索时的响应(Response
)信息。
3. 爬虫与请求(Request)与响应(Response)关系
测试
说明一下浏览器发送HTTP请求的过程
-
当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
-
当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。
-
浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
-
当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。
拓展
-
如果再次访问相同网页,浏览器访问过程是一样的吗?
网友评论