爬虫原理

2018-11-24  本文已影响59人  jdzhangxin

一、基本问题

1. 爬虫是什么?

爬虫通常是网络爬虫的简称,是一种按照一定的规则,自动地请求抓取网页信息的程序或者脚本。

2. 爬虫能做什么?

只要能通过浏览器访问的数据都可以通过爬虫抓取。例如:文本、图片、视频等数据。

3. 爬虫的工作原理

模拟浏览器访问网页,获取网页中指定的数据。

二、爬虫分类

  1. 通用爬虫
    无差别收集数据,提取关键字,并建立索引库。例如:搜索引擎,Google、Baidu、微软都有自己的爬虫。


  1. 聚焦爬虫
    针对特定的网站和特定内容采集数据。我们通常写的就是这类爬虫。


三、爬虫的基本流程

爬虫的基本流程本质就是模拟浏览器访问网页的过程。

  1. 发起请求
    向目标站点发起请求(Request),请求可能包含额外的header等信息,然后等待服务器响应。

  2. 获取响应
    服务器接受到请求后,返回一个正常响应(Response),响应的内容就是页面内容。响应类型主要是HTML、JSON字符串、二进制数据(图片、视频、音频、pdf、word)等。

  3. 解析内容
    根据响应内容类型的不同,处理方式也是不同的。

    No. 类型 处理方式
    1 HTML 使用正则表达式或者页面解析库进行解析
    2 JSON 直接转换为JSON对象解析
    3 二进制数据 保存或者进一步的处理
  4. 保存数据
    根据响应内容类型的不同,保存形式也是不同的。

    No. 类型 保存形式
    1 HTML、JSON 保存成文本(csv、xml、html)
    2 二进制数据 保存特定格式的文件
    3 所有格式 保存到数据库

四、Robots协议

特指网站中robots.txt文件,告诉爬虫什么可以爬取(Allow),什么不可以爬取(Disallow)。

理论很枯燥,但是理论指导实践。


五、请求(Request)与响应(Response)

请求与响应

请求(Request)和响应(Response)就是浏览器与服务器之间通信。我们日常通信方式有信件和Email。

信封格式


书信格式

Email格式

1. 请求(Request)

格式

实例

请求(Request)通常主要关注四部分:请求方式、请求URL、请求头、请求体

  1. 请求方式
    请求方式常用的主要有两种方式:GETPOST
    • GET:向指定的资源发出显示请求。
      使用GET方法应该只用在读取数据(查),而不应当被用于产生副作用的操作中(增删改)。

    • POST:向指定资源提交数据,请求服务器进行处理。
      (例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

案例

No. GET POST
1 Baidu 登录、注册
2 浏览商品 购买商品

重点

GETPOST的区别就是:GET的请求数据在URL中,POST则是存放在请求体中。

注意:重点问题答不上来会被面试官鄙视,甚至有些面试官以此为由被Pass掉。

  1. 请求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
      
  1. 请求头
    请求头包含请求时的头部信息,如User-Agent,Host,Cookies等信息

  2. 请求体
    请求体是请求信息数据,如提交表单数据时候的表单数据。

实践
使用浏览器查看百度搜索时的请求(Request)信息。

2. 响应(Response)

格式

实例

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态码,以及描述状态的短语,彼此由空格分隔。

响应(Response)通常主要关注响应状态、响应头和响应体三部分。

  1. 响应状态
    响应状态是用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响应代码

  2. 响应头
    响应头主要包含内容类型,类型的长度,服务器信息,设置Cookie

  3. 响应体
    响应体包含请求资源的内容,如网页HTML、JSON文本、二进制数据(图片、音频、视频)等。

练习
使用浏览器查看百度搜索时的响应(Response)信息。

3. 爬虫与请求(Request)与响应(Response)关系

测试

说明一下浏览器发送HTTP请求的过程

  1. 当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。

  2. 当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。

  3. 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。

  4. 当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

拓展

  1. 如果再次访问相同网页,浏览器访问过程是一样的吗?


上一篇 下一篇

猜你喜欢

热点阅读