【python爬虫】初识爬虫
一、爬虫的定义
爬虫定义:程序或者脚本——自动的爬取万维网的数据的程序或者脚本。
二、爬虫可以解决的问题
1、解决冷启动问题。
2、搜索引擎的根基——通用爬虫。
3、帮助机器学习建立知识图谱。
4、制作各种比价软件。
三、爬虫工程师的进阶之路
1、初级爬虫工程师
(1)web 前端的知识: HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
(2)正则表达式, 能提取正常一般网页中想要的信息,比如某些特殊的文字, 链接信息, 知道什么是懒惰, 什么是贪婪型的正则;
(3)会使用 XPath 等获取一些DOM 结构中的节点信息;
(4)知道什么是深度优先, 广度优先的抓取算法, 及实践中的使用规则;
(5)能分析简单网站的结构, 会使用urllib或requests 库进行简单的数据抓取。
2、中级爬虫工程师
(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)并发下载,通过并行下载加速数据爬取;多线程的使用。
3、高级爬虫工程师
(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协议
是一种规范——————>约束发布和接受html的规范。
2、http和https
http:超文本传输协议。
https : 安全版的http协议。---ssl---
对称加密---密钥
非对称---私钥+公钥
数字签证---
3、端口号
https:443
http:80
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:
④代理ip:ip:port
⑤path:资源路径。---index.html
⑥query:请求参数:---?后面的内容username=123&password=abc
⑦fragment:锚点----top
原因:url包含netloc可以定位电脑,path定位资源,这样就可以找到任意在互联网上的信息。
(3)特殊符号:
?:后面就是请求参数
& : 连接请求参数
# : 锚点----如果url中有锚点,在爬虫程序中尽量去除。
6、 http的工作过程
(1)地址解析:
将url的所有组成部分分别解析出来。
(2)封装http请求数据包。
将第一步解析出来的信息进行装包。---http数据包。
(3)封装tcp数据包,通过三次握手建立tcp。
(4)客户端发送请求
(5)服务发送响应
(6)关闭tcp连接。
7、当我们在浏览器输入一个url,浏览器加载出这个页面,中间做了哪些事?
(1)客户端解析url,封装数据包,建立连接,发送请求。
(2)服务器返回url对应资源文件给客户端,比如:index.html。
(3)客户端检查index.html是否有静态资源(引用外部文件),比如js,css,图片。有的话再分别发送请求,来获取这些静态资源。
(4)客户端获取所有静态,通过html语法,完全将index.html页面显示出来。
8、 http的请求方法:
get请求:get(获取)-->获取服务器的指定资源--->涉及到筛选一些信息--->请求参数:主要拼接在url中。--->不安全(别人可以通过url获取信息)--->请求参数的大小受限。
post请求:post(邮递)--->向服务器传递数据--->请求数据是方法在请求实体中的--->安全--->大小不受限。
9、客户端请求
(1)组成:请求行、请求头、空行、请求数据(实体)
请求头:请求方法;host地址,http协议版本。
(2)请求头:
①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
10、服务器响应:
(1)组成:状态行、响应头、空行、响应正文。
(2)响应头
Content-Type:text/html;charset=UTF-8
(3)状态码(面试常考)
①1XX:表示服务器成功接收部分请求,还需要发剩余请求才能处理整个过程。(处理了一半)
②2XX:标识服务器成功接收请求并处理完整个过程。(成功)
200成功
③3XX:为了完成请求,客户端需要进一步细化请求。
302:重定向
304:使用缓存资源
④4XX:客户端请求错误。(url写错了)
404:服务器无法找到请求内容。
403:服务器拒绝访问,权限不够。
⑤5XX:服务器错误。
502:服务器错误
500:请求未完成,服务器遇到不可知问题
【python爬虫】初识爬虫的更多相关文章
- Python爬虫--初识爬虫
Python爬虫 一.爬虫的本质是什么? 模拟浏览器打开网页,获取网页中我们想要的那部分数据 浏览器打开网页的过程:当你在浏览器中输入地址后,经过DNS服务器找到服务器主机,向服务器发送一个请求,服务 ...
- 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块
孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...
- python爬虫从入门到放弃(一)之初识爬虫
整理这个文档的初衷是自己开始学习的时候没有找到好的教程和文本资料,自己整理一份这样的资料希望能对小伙伴有帮助 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页 ...
- Python 爬虫1——爬虫简述
Python除了可以用来开发Python Web之后,其实还可以用来编写一些爬虫小工具,可能还有人不知道什么是爬虫的. 一.爬虫的定义: 爬虫——网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区 ...
- Python 开发轻量级爬虫08
Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...
- Python 开发轻量级爬虫07
Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...
- Python 开发轻量级爬虫06
Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...
- Python 开发轻量级爬虫05
Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...
- Python 开发轻量级爬虫04
Python 开发轻量级爬虫 (imooc总结04--url管理器) 介绍抓取URL管理器 url管理器用来管理待抓取url集合和已抓取url集合. 这里有一个问题,遇到一个url,我们就抓取它的内容 ...
- Python 开发轻量级爬虫03
Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...
随机推荐
- ES 6新语法
一.块级作用域绑定 回顾:使用var关键字定义变量 定义 = 声明 + 赋值: 1. 可以一次定义多个变量 2. 定义时可以只声明不赋值 3. 定义之后可以随时修改变量的值 4. 变量声明会被提升 ...
- windows下安装了2个python,如何下载模块到不同的python中
修改python名称即可,修改Scrpit下的pip名称即可,用不同的名称打开就行 https://www.cnblogs.com/legend-123/p/11195706.html
- C#后台架构师成长之路-基础体系篇章大纲
如下基础知识点,如果不熟透,以后容易弄笑话..... 1. 常用数据类型:整型:int .浮点型:double.布尔型:bool.... 2. 变量命名规范.赋值基础语法.数据类型的转换.运算符和选择 ...
- springioc之依赖注入
1.1.2 IoC能做什么 IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类 ...
- RTP通用头部扩展
概览 本文为阅读RFC5285时对RTP头部扩展的记录笔记,介绍了one-byte-header和two-byte-header情况下的rtp头部扩展 rtp头部扩充 在RFC3550中, 一个通用的 ...
- jupyter notebook改变行间图片大小
jupyter notebook使用起来代码效果很直接,这是我最喜欢的一点,但是主题单一,后来改了一下主题.也可以接受了,但是还有一个问题是显示图片太小我们可以用两个方法来改变它. 一.可以通过rcP ...
- Vue 从入门到进阶之路(十一)
之前的文章我们说了一下 vue 中组件的原生事件绑定,本章我们来所以下 vue 中的插槽使用. <!DOCTYPE html> <html lang="en"&g ...
- jvm虚拟机笔记<一> 内存区域
运行时数据区域: 程序计数器:字节码的行号指示器. 虚拟机栈:为每个方法创建一个栈帧(存放方法中的局部变量,变量引用等). 本地方法栈:存放本地方法. ------------------------ ...
- spring一个标准的xml文件头
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- ABAP 字符串换行符处理
今天发现BW系统从K3系统数据库抽取会计科目的描述时,转换出错. 从监控器上看是值2KO 845 412D#有问题,但不知道有什么问题,检查后感觉是符号#的问题. 在转换中添加代码,替换#,发现没有起 ...