Python爬虫:认识爬虫

一、爬虫的定义

定义:程序或者脚本,自动爬取万维网的数据的程序或者脚本

二、爬虫可以解决的问题

  1. 解决冷启动的问题
  2. 搜索引擎的根基,(通用爬虫)
  3. 帮助机器学习建立知识图谱
  4. 制作各种比价软件

三、爬虫工程师

  • 初级爬虫工程师
    1. web前端的知识:HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
    2. 正则表达式, 能提取正常一般网页中想要的信息,比如某些特殊的文字, 链接信息, 知道什么是懒惰, 什么是贪婪型的正则;
    3. 会使用 XPath 等获取一些DOM 结构中的节点信息;
    4. 知道什么是深度优先, 广度优先的抓取算法, 及实践中的使用规则;
    5. 能分析简单网站的结构, 会使用urllib或requests 库进行简单的数据抓取。
  • 中级爬虫工程师
    1. 了解什么是Hash,会简单的使用MD5,sha1等算法对数据进行Hash一遍存储
    2. 熟悉HTTP,HTTPS协议的基础知识,了解GET,POST方法,了解HTTP头中的信息,包括返回状态码,编码,user-agent,cookie,session等
    3. 能设置user-agent进行数据爬取,设置代理等
    4. 知道什么是Request,什么是response,会使用Fiddler等工具抓取及分析简单地网络数据包;对于动态爬虫,要学会分析ajax请求,模拟制造post数据包请求,抓取客户端session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录。
    5. 对于一些难搞定的网站学会使用phantomjs+selenium抓取一些动态网页信息
    6. 并发下载,通过并行下载加速数据爬取;多线程的使用。
  • 高级工程师
    1. 能够使用Tesseract,百度AI,HOG+SVM,CNN等库进行验证码识别。
    2. 能使用数据挖掘技术,分类算法等避免死链。
    3. 会使用常用的数据库进行数据存储,查询。比如mongoDB,redis;学习如何通过缓存避免重复下载的问题。
    4. 能够使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁IP封禁等。
    5. 能使用一些开源框架scrapy,scrapy-redis等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。

四、搜索引擎

  1. 什么是搜索引擎?

    通过特定的算法,从互联网上获取网页信息,将其保存在本地,为用户提供检索服务的一种程序。

  2. 搜索引擎的组成

    1. 通用爬虫:将互联网上的网页信息整体爬取下来的爬虫程序。
    2. 搜索引擎的工作步骤:
      • 抓取网页
      • 数据存储
      • 预处理,(提问文字,中文分词,消除噪音)
      • 设置网站排名(访问量),为用户提供检索服务
    3. 为什么搜索引擎可以爬取所有的网页?又是如何爬取所有网页的?
      • 一个网页就是一个url,url的获取来源?
      • url 的获取来源:
        • 新网站会主动提交网址给搜索引擎。
        • 网页中的一些外联,这些 url 全部都会加入到通用爬虫的爬取队列。
        • 搜索引擎和 dns 解析服务商合作,如果有新网站注册,搜索引擎就可以拿到网址。
  3. 通用爬虫的缺陷

    1. 通用爬虫是爬取整个网页,但是网页当中 90% 的内容是基本没用的。
    2. 不能满足不同行业,不同用户的不同需求。
    3. 只能获取文字,不能获取音频,视频,文档等媒体文件。
    4. 只能通过关键字查询,无法通过语义查询。
  4. 聚焦爬虫

    在试试网页抓取的过程中,会对内容进行筛选,尽量保证只抓取与需求相关的信息的爬虫程序。

五、robots协议

定义:网络爬虫排除标准。

作用:告诉搜索引擎那些可以爬取,那些不可以爬取。

六、Http协议

  1. HTTP 和 HTTPS

    HTTP协议(超文本传输协议):只一种发布和接收 HTML 页面的方法,亦可以说是一种约束。

    HTTPS协议:简单来说,就是 HTTP 的安全版,在 HTTP 下加入 SSL 层

    HTTP 的端口号是80
    HTTPS 的端口号是443
    Upgrade-Insecure-Requests: 1:为 1 的时候可以将http升级成https请求。

  2. HTTP 特点

    1. 应用层协议。
    2. 无连接:http 每次发送请求和响应的过程都是独立的。(在http 1.0以后,有请求头:connection:keep-alive:客户端和服务建立长连接。)
    3. 无状态:http 协议不记录状态,所以需要cookie 和 session 来记录请求状态。cookie 是保存在客户端的浏览器上的,session 是保存在服务器上的,依赖于cookie。
  3. URL–统一资源定位符

    1. 主要作用:用来定位互联网上的任意资源的位置。

    2. 为什么 url 可以定位任意资源?
      example:https://www.baidu.com/index.html?username=Ian&password=123456#top

       scheme,协议 -- https
       netloc,网络地址 -- ip:port -- www.baidu.com:443(通过ip 定位电脑,通过 port 定位应用)
       path,资源路径 -- index.html
       query,请求参数 -- ? 后面的内容:username=Ian&password=123456
       fragment,锚点 -- top(跳转到网页的指定锚点位置)
      
    3. 特殊符号:
      ?:后面是请求参数
      &:连接请求参数
      #:锚点,如果url 中有锚点,在爬虫程序中尽量去除

  4. HTTP 的工作原理

    1. 地址解析:将 url 的所有组成部分分别解析出来
    2. 封装 HTTP 请求数据包,将第一步解析出来的信息进行装包(http数据包)。
    3. 封装 TCP 数据包,通过三次握手建立TCP。
    4. 客户端发送请求。
    5. 服务器发送响应。
    6. 关闭 TCP 连接。
  5. 浏览器是如何实现加载一个完整的页面的?

    1. 客户端解析 url,封装数据包,建立连接,发送请求。
    2. 服务器返回url 对应资源文件给客户端,比如:index.html。
    3. 客户端检查响应是否有静态资源(是否引入外部文件),比如 js,css,image等。如果有的话在分别发送请求获取这些静态资源。
    4. 客户端获取所有静态资源,通过HTML 语法,完全将 index.html 页面显示出来。
  6. http 请求的方法

    get请求:get(获取)— 获取服务器的指定资源 — 涉及到筛选一些信息 — 请求参数:主要拼接在url中 — 不安全(别人可以通过url获取信息)— 请求参数的大小受限。

    post请求:post(邮递)— 向服务器传递数据 — 请求数据是方法在请求实体中的 — 安全 — 大小不受限。

  7. 客户端请求

     组成:请求行,请求头,空行,请求数据(实体)
    

    请求头:

    • user-agent:客户端标识。
    • accept:允许传入的文件类型。(Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3)
    • Referer:标识产生请求的网页来自于哪个网页。
    • cookie:cookie信息。—现在很多网站,必须封装cookie才给数据。

    post重要的请求头:

    • content-type:post请求的数据类型
    • content-length:post请求数据的长度。

    ajax 请求必须封装的头:

    • x-requested-with:xmlhttprequest
  8. 服务器响应:

     组成:状态行,响应头,空行,响应正文。
    
    1. 响应头:Content-Type:text/html;charset=UTF-8
    2. 状态码(面试常考):
      • 100-199:表示服务器成功接收部分请求,还需要发剩余请求才能处理整个过程。(处理了一半)
      • 200-299:标识服务器成功接收请求并处理完整个过程。(成功)
        200:请求成功
      • 300-399:为了完成请求,客户端需要进一步细化请求。
        302:重定向
        304:使用缓存资源
      • 400-499:客户端请求错误。(url写错了)
        403:服务器拒绝访问,权限不够
        404:服务器无法找到请求内容
      • 500-599:服务器错误。
        500:请求未完成,服务遇到不可知问题
        502:服务器错误

你可能感兴趣的:(Python爬虫)