分享

爬虫从入门到精通(1) | 爬虫入门需要了解的一些事情...

 和相品 2022-05-17 发布于北京


在这里插入图片描述

一、在做爬虫之前我们首先需要知道爬虫是什么?

  • 概念:一个可以自动抓取互联网上信息的脚本。
  • 解决的问题
    • ①解决网站创立之初的冷启动问题;
    • ②做搜索引擎少不了爬虫,爬虫是搜索引擎的根基。例如百度搜索引擎;
    • ③建立知识图谱,帮助建立机器学习知识图谱;
    • ④可以制作各种商品的比价软件,趋势分析;

二、爬虫工程师的升级之路

初入茅庐

  • 1.web 前端的知识: HTML、CSS、JavaScrip、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.并发下载,通过并行下载加速数据爬取;多线程的使用。
  • 7.能使用一些开源框架scrapy,scrapy-redis等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。

大有所成

  • 1、能够使用Tesseract,百度AI,HOG+SVM,CNN等库进行验证码识别。
  • 2、能使用数据挖掘技术,分类算法等避免死链。
  • 3、会使用常用的数据库进行数据存储,查询。比如mongoDB,redis;学习如何通过缓存避免重复下载的问题。
  • 4、能够使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁IP封禁等。

三、百度搜索的实现大概原理

最大的爬虫就是搜索了,例如百度就是从各种网站抓取我们需要的信息,那么他大概是怎么弄实现的呢?

1.搜索引擎的工作流程

  • 抓取网页: 通过搜索引擎将待爬取的url加入到通用爬虫的url队列中,进行网页内容的爬取
  • 数据存储:将爬取下来的网页保存到本地,这个过程会有一定的去重操作,如果某个网页的内容大部分内容都会重复,搜索引擎可能不会保存
  • 数据预处理: 提取文字,中文分词, 消除噪音(比如版权声明文字,导航条,广告等)
  • 设置网站排名,为用户提供服务

2.搜索引擎的局限性

  • 搜索引擎只能爬取原网页,但是页面90%内容都是无用的
  • 搜索引擎不呢个满足不同行业,不同人的特定需求
  • 通用搜索引擎只能爬取文字信息,不能对音频、图片等进行爬取
  • 只能基于关键字查询,无法基于语义查询

四、robot协议

作为一个守法的公民,我们一定要遵守互联网的规则!因此我么需要遵守一个协议—robot协议!
网址后+robot.txt

在这里插入图片描述

  • 定义:网络爬虫排除标准
  • 作用:告诉搜索引擎哪里可以爬,哪里不可以爬

在这里插入图片描述


五、爬虫工程师必须掌握的HTTP协议

1.什么是http协议?

  • http协议是一个超文本传输协议
  • http协议是一个约束发布和接受html页面的规范

2.端口号

  • http协议端口号:80
  • https协议的端口号:443

3.http协议的特点

  • http协议是一个应用层协议
  • http协议是无状态、无连接的。
    • 每次请求都是独立的。
    • 客户端每次请求都不能记录请求状态,请求与请求之间相互独立,不能通信(cookie和session可以解决通信问题)。

4.url:统一资源定位符

  • 格式: <协议>://<IP地址>:<端口号>/<路径>?<参数1=值>&<参数2=值>

  • 例如:http://baidu.com/video/?keyword=美女

  • 为啥可以通过url定位互联网上的任意资源

    • ip地址:可以定位电脑
    • 端口号:端口号—用来从互联网进入电脑
    • 路径:就是为了在电脑中找到对应的资源路径
  • 三种特殊符号

    • 符号 :问号后面就是请求参数
    • 符号& : 请求参数用&连接,例如:?name=zhangsan&age=12
    • 符号# :锚点,锚点就是在请求这个url时,页面会跳入的指定位置

5.http工作过程

(1)地址解析,将url解析出对应的内容

  • host:服务器的IP地址或者域名
  • port:服务器的端口(如果是走协议默认端口,缺省端口80)
  • path:访问资源的路径
  • query-string:参数,发送给http服务器的数据anchor:锚(跳转到网页的指定锚点位置)

(2)封装http请求数据包

(3)封装成TCP包,建立TCP连接(TCP的三次握手)

  • 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
  • 完成三次握手,客户端与服务器开始传送数据
    在这里插入图片描述

(4)客户端发送请求

(5)服务器接收请求,发送响应

(6)服务器关闭tcp连接

6.浏览器输入一个url,为什么可以加载出一个页面?为什么在抓包的过程中请求了一个url,会出现很多的资源请求?

  • 我们在浏览器输入一个url,客户端会发送这个url对应的一个请求到服务器获取内容
  • 服务器收到这个请求,解析出对应内容,之后将内容封装到响应里发送到客户端
  • 当客户端拿到这个html页面,会查看这个页面中是否有css、js、image等url,如果有,在分别进行请求,获取到这些资源。
  • 客户端会通过html的语法,将获取到的所有内容完美的显示出来。

7.客户端请求

  • 组成:请求行、请求头部、空行、请求数据四个部分组成

  • 请求方法:get/post

  • ③get和post的区别

    • (1)get是从服务器获取内容,post是向服务器传递内容
    • (2)get不安全,因为参数拼接在url后面。post比较安全,因为参数是放在是实体里面。
    • (3)get传参大小受限,post不受限。
  • ④重要的请求头:

User-Agent:客户端请求标识。
Accept: (传输文件类型)允许传入的文件类型。
Referer :表明产生请求的网页来自于哪个URL,用户是从该Referer页面访问到当前请求的页面。
cookie (cookie):在做登录的时候需要封装这个头。
Content-Type (POST数据类型)
    
发送POST请求时,需要特别注意headers的一些属性:
Content-Length: 144: 是指发送的表单数据长度为144,也就是字符个数是144个。
X-Requested-With: XMLhttpRequest :表示Ajax异步请求。

8.服务响应

  1. 组成:状态行,响应头,空行,响应正文。
  2. 重要响应头:Content-Type:text/html;charset=UTF-8:告诉客户端,资源文件的类型,还有字符编码
  3. 常见的状态码:
    在这里插入图片描述

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多