爬虫(一):爬虫的基础知识 ---通用爬虫和聚焦爬虫,http和https协议,常见的响应状态码
一、爬虫的定义
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
二、爬虫可以解决的问题
- 解决冷启动问题
- 搜索引擎的根基。 —通用爬虫
- 帮助机器学习建立知识图谱
- 制作各种比价软件
三、爬虫工程师的进阶之路
初级爬虫工程师
web前端的知识
HTML、CSS、Javascript、DOM、DHTML、Ajax、jQuery、json等
正则表达式
能提取正常一般网页中想要的信息,比如:某些特殊的文字,链接信息,知道什么是懒惰,什么是贪婪型的正则;
会使用 XPath 等获取一些 DOM 结构中的节点信息;
知道什么是深度优先,广度优先的抓取算法,以及实践中的使用规则;
能分析简单网站的结构,会使用 urllib 或 requests 库进行简单的数据抓取。
中级爬虫工程师
- 了解什么是 HASH ,会简单地使用 MD5,SHA1 等算法对数据进行 HASH 一遍存储
- 熟悉 HTTP,HTTPS 协议的基础知识,了解 GET,POST 方法,了解 HTTP 头中的信息,包括返回状态码,编码, user-agent , cookie ,sesssion 等
- 能设置 user-agent 进行数据爬取,设置代理等
- 知道什么是 Request,什么是 response,会使用 Fiddler 等工具抓取即分析简单地网络数据包;对于动态爬虫,要学会分析 ajax 请求,模拟制造 post 数据包请求,抓取客户端 session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录。
- 对于一些难搞定的网站学会使用 phantomjs + selenium 抓取一些动态网页信息
- 并发下载,通过并行下载加速数据爬取;多线程的使用
高级爬虫工程师
- 能够使用 Tesseract,百度 AI,HOG + SVM ,CNN等库进行验证码识别。
- 能使用数据挖掘技术,分类算法等避免死链。
- 会使用常用的数据库进行数据存储,查询。比如:MongoDB、redis等;学习如何通过缓存避免重复下载的问题。
- 能够使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁 IP 等。
- 能使用一些开源框架 scrapy,scrapy-redis 等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。
四、搜索引擎
1、什么是搜索引擎
搜索引擎通过特定算法,从互联网上获取网页信息,将其保存到本地,为用户提供检索服务的一种程序。
2、搜索引擎的组成
搜索引擎主要是由通用爬虫组成的。
(1)通用爬虫:将互联网上的网页信息整体爬取下来的爬虫程序。
(2)搜索引擎的工作步骤:
- 抓取网页
- 数据存储
- 预处理
- 提取文字
- 中文分词
- 消除噪音
- 设置网站排名(访问量),为用户提供检索服务
(3)为什么搜索引擎可以爬取所有的网页?—搜索引擎是如何爬取所有网页的
一个网页就是一个 url ,这个问题其实在问,url的获取来源
url的获取来源:
- 新网站会主动提交网址给搜索引擎。
- 网页中的一些外链,这些 url 全部都会加入到通用爬虫的爬取队列。
- 搜索引擎和 dns 解析服务商合作,如果有新网站注册,搜索引擎就可拿到网址。
3、通用爬虫的缺陷
- 通用爬虫是爬取整个网页,但是网页中 90% 的内容基本是没有用处的。
- 不能满足不同行业,不同人员的不同需求。
- 只能获取文字,不能获取音频,视频,文档等信息。
- 只能通过关键字查询,无法通过语义查询。
4、聚焦爬虫
聚焦爬虫:在实施网页抓取的过程中,会对内容进行筛选,尽量保证只抓取与需求相关的信息的爬虫程序。
五、robots协议
定义:网络爬虫排除标准
作用:告诉搜索引擎哪些可以爬,哪些不能爬。
六、http 协议
1、什么是 http 协议
http 协议:是一种发布和接收 HTML 页面的方法,是规范。
2、http 和 https
http:超文本传输协议
https:http的安全版,在 http 下加入 SSL 层。
对称加密----密钥
非对称----私钥 + 公钥
数字签证—
3、默认端口
http:80
https:443
Upgrade-Insecure-Requests : 1 ; 可以将 http 升级成 https 请求。
4、http 的特点
(1)应用层协议
(2)无连接
http 每次发送请求和响应的过程都是独立的。
在 http 1.0 以后,有请求头:
connection:keep-alive
客户端和服务器建立长连接
(3)无状态
http 协议不记录状态
cookie 和 session 做到请求状态的记录。
cookie 是在客户端保存,session 是在服务器保存。
5、url 统一资源定位符
(1)主要作用:用来定位互联网上的任意资源的位置。
(2)为什么 url 可以定位任意资源?
组成:https://www.baidu.com/index.html?username=123&password=abc#top
scheme :协议----https
netloc:网络地址 ip:port ----www.baidu.com
通过 ip 定位电脑,通过 port 定位应用
192.168.92.10:80
path:资源路径。— index.html
query:请求参数。----?后面的内容 username=123&password=abc
fragment:锚点。 ---- top
原因:url 包含 netloc 可以定位电脑,path 定位资源,这样就可已找到任意资源
(3)特殊符号
?:后面就是请求参数
&:连接请求参数
#:锚点 — 如果 url 中有锚点,在爬虫程序中尽量去除
6、http 的工作过程
- 地址解析
- 将 url 的所有组成部分分别解析出来
- 封装 http 请求数据包
- 将第一步解析出来的信息进行装包。 — http 数据包
- 封装 tcp 数据包,通过三次握手建立 tcp
- 客户端发送请求
- 服务器发送响应
- 关闭 tcp 连接
7、当我们在浏览器输入一个 url ,浏览器加载出这个页面,中间做了哪些事?
- 客户端解析 url ,封装数据包,建立连接,发送请求。
- 服务器返回 url 对应资源文件给客户端,比如:index.html
- 客户端检查 index.html 是否有静态资源(引用外部文件),比如 js,css,图片。有的话在分别发送请求,来获取这些静态资源。
- 客户端获取所有静态资源,通过 html 语法,完全将 index.html 页面显示出来。
8、http 的请求方法
get 请求
- get 获取服务器的指定资源
- 涉及到筛选一些信息
- 请求参数:主要拼接在 url 中
- 不安全,别人可以通过 url 获取信息
- 请求参数的大小受限
post 请求
- post 向服务器提交数据
- 请求数据是放在请求实体中的
- 安全
- 请求参数的大小不受限
9、客户端请求
(1)组成:请求行、请求头、空行、请求数据(实体)
请求头:请求方法;host 地址,http 协议版本。
(2)请求头
user-agent:客户端标识。
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:请求的数据类型content-length:请求数据的长度ajax请求必须封装的头:x-requested-with:XmlHttpRequest
10、服务器响应
(1)组成:状态行、响应头、空行、响应正文
(2)响应头:
Content-Type:text/html;charset=UTF-8
(3)状态码(面试常考):
常见状态码:
- 1xx:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
- 2xx:表示服务器成功接收请求并已完成整个处理过程。
- 200:请求成功
- 3xx:未完成请求,客户需进一步细化请求。
- 302:重定向
- 304:使用缓存资源
- 4xx:客户端请求错误。(url写错了)
- 404:服务器无法找到请求内容
- 403:服务器拒绝访问,权限不够
- 5xx:服务器错误。
- 502:服务器错误
- 500:请求未完成,服务器遇到不可知问题。
爬虫(一):爬虫的基础知识 ---通用爬虫和聚焦爬虫,http和https协议,常见的响应状态码相关推荐
- python爬虫常见报错_Python爬虫常见HTTP响应状态码详解
在使用Python进行网页数据抓取时,经常会遇到无数据返还或错误等异常,这个时候可以通过status_code命令来查看获得http请求返回的状态码,以便查找原因并制定相应的解决方案.import r ...
- 【转载】爬虫篇——requests的基础知识(总结)
注意:本文章的大部分代码案例出自于<Python3 网络爬虫开发实战(第2版)>. 一.GET请求 import requestsres = requests.get('https://w ...
- python构造响应头_Python爬虫库requests获取响应内容、响应状态码、响应头
首先在程序中引入Requests模块 import requests 一.获取不同类型的响应内容 在发送请求后,服务器会返回一个响应内容,而且requests通常会自动解码响应内容 1.文本响应内容 ...
- python request返回的响应_Python爬虫库requests获取响应内容、响应状态码、响应头...
首先在程序中引入Requests模块 import requests 一.获取不同类型的响应内容 在发送请求后,服务器会返回一个响应内容,而且requests通常会自动解码响应内容 1.文本响应内容 ...
- python爬虫需要哪些基础知识-【PYTHON】【爬虫】关于python爬虫的一些基础知识
基础知识 HTTP协议 我们浏览网页的浏览器和手机应用客户端与服务器通信几乎都是基于HTTP协议,而爬虫可以看作是一个另类的客户端,它把自己伪装成浏览器或者手机应用客户端,按照自己的逻辑贪婪的向服务器 ...
- 第三十六期:学 Java 网络爬虫,需要哪些基础知识?
说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...
- 学 Java 网络爬虫,需要哪些基础知识?
说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...
- 性能测试之前端性能优化(前端基础知识,前端性能测试常用工具,前端性能优化常见方法)
目录 1. 前端基础知识 1.1 为什么要关注前端页面的性能,了解页面的加载,渲染方式和顺序? 1.2 一次页面请求会经历哪些步骤? 1.3 页面的展示过程 2. 前端性能测试的常用工具 2.1 Go ...
- Python基础知识回顾及scrapy框架爬虫基础
1.函数 函数参数:必须 默认 关键 可变 函数种类:外部 内部 匿名 lambda 装饰函数:@语法糖 函数总是要返回的 ,若没有return,None总是被返回 2.面向对象: 对象:已存在, ...
最新文章
- opencv分别使用指针和LUT函数对BGR图像像素进行反转处理
- 移位寄存器专题(verilog HDL设计)
- Java异步执行多个HTTP请求的例子(需要apache http类库)
- 关于简单动态规划(Dynamic Programming)的总结
- Rolling Guidance Filter
- Transformer源代码解释之PyTorch篇
- 天梯赛2016-L2
- 用C#开发Windows应用程序
- Java获取请求客户端的真实IP地址
- Mybatis源码解析:sql参数处理(3)
- 电力电容器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- HTML5之2D物理引擎 Box2D for javascript Games 系列 第二部分
- 【Robot Framework】字符串判断,if语句多执行条件,多执行语句
- 软件立项申请报告模板
- 使用 docker 来安装 oracle 11c
- 微信小程序实现滑动布局
- AI Studio 数据集
- postgresql数据库进行等保测评(审计) 需要修改的参数
- 2020科目一考试口诀_2020年驾考科目一考试技巧与口诀
- 计算机网络 latency,网络中delay和latency的区别
热门文章
- php无限循环分类,php实现无限分类功能
- DataHub调研数据血缘
- 拼多多开店不做推广能行吗?
- matlab两个for循环嵌套加速,使用bsxfun加速Matlab嵌套for循环
- Java和大数据到底是什么关系?
- nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 异常
- kafka消息存储机制和原理
- 计算机维修志愿服务,计控学院深入社区开展“电脑维修”学雷锋志愿活动
- 鸿蒙需要多少技能命中,【攻略团】鸿蒙困难(天音视角)
- 软件开发知识点基础介绍