爬虫方向的知识是十分碎片化的,我们在写爬虫针对的各种各样的网站,每个网站用到的反爬技术可能都不一样,所以我们面对不同的网站要有不同的解决方案。

首先我们来聊聊为什么要学习爬虫?

大家都知道我们现在是大数据的时代,那大家有没有想过我们的数据从那里来的?

数据的来源有很多种方式,我们仅讨论几种常见的方式

  • 企业本身用户生产的数据
  • 政府/机构提供的公开的数据
  • 第三方数据平台购买的数据
  • 爬虫获取到的数据

前面3种方式,跟爬虫的关系并不大,我们不展开讨论,最后一条就是我们为什么要学习爬虫的原因了。而且爬虫获取到的数据,还可以有更大的用途,比如给一些算法提供数据。

聊完为什么要学习爬虫,那有的宝就要问了,我听说go、易语言、都能做爬虫,为什么要选择用Python来做爬虫呢?

原因有以下几点:

  • 代码简介,开发效率高
  • 支持的模块多
  • HTTP请求和HTML解析的模块丰富
  • 调用其他接口也非常方便。

爬虫的概念

每个人对爬虫的理解不一样,所以概念大家不用过多的纠结,网络爬虫就是模拟客户端(主要指浏览器)发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。

这里很多刚刚开始接触爬虫的小可爱们,老是被网上的小视频忽悠,觉得爬虫跟黑客一样,无所不能。

这里我要澄清一下

  • 只要是浏览器能做的事情,原则上,爬虫都能够做
  • 爬虫也只能获取客户端所展示出来的数据!!!!!

尤其是第二点,爬虫不能爬人家的聊天记录啊,我的宝~~, 也不能给你定位你的女朋友位置啊,更不能窃取人家的隐私啊

爬虫的更多用途

当然爬虫除了可以获取到数据之外,确实可以做一些其他的事情。

比如软件测试,爬虫中会用到selenium模块,这个东东可以用在自动化测试当中,还有appium也可以用到移动端的测试中。

还有一些抢票和投票的网站,也可以用爬虫来做点事情,手动狗头保命!

在一些网络安全中,偶尔也会用到爬虫

爬虫是怎么抓取网页的数据

首要就要聊到网页三大特征:

  • 1 网页都有自己唯一的URL
  • 2 网页都是HTML来描述页面信息
  • 3 网页都使用HTTP/HTTPS协议来传输HTML数据

爬虫的设计思路:

  • 1 确定需要爬取的URL地址
  • 2 通过HTTP/HTTPS协议获取对应的HTML页面
  • 3 提取HTML页面有用的数据

爬虫的分类

根据使用场景,网络爬虫可分为通用爬虫和聚焦爬虫两种

  • 通用网络爬虫 是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
  • 聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于: 聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

根据是否以获取数据为目的,可以分为功能性爬虫和数据增量爬虫

  • 功能性爬虫,在网站上投票,点赞
  • 数据增量爬虫,比如招聘信息

HTTP和HTTPS

在正式开始学习爬虫之前,我们先来了解一下HTTP和HTTPS协议,这里我们只站在爬虫的角度去了解这两个协议。

先来聊聊什么是协议,协议就是双方共同遵守的一组约定,只有大家都遵守这个约定,我们才可以玩下去。举个例子,你和老外沟通大家要么都说英文,要不都说汉语,不然一个英文一个汉语,你俩是没有办法沟通的。计算机的通信也是一样的。

HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层

SSL(Secure Sockets Layer 安全套接层)主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全

  • HTTP的端口号为80
  • HTTPS的端口号为443

HTTPS比HTTP更安全,但是性能更低

HTTP的请求与响应

HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeoGwRaG-1667646342838)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0ae73901ee82415d91fb2c80da86099d~tplv-k3u1fbpfcp-watermark.image?)]

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

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

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

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

在来看下我们最熟悉的网址,URL:统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

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

客户端HTTP请求

URL只是标识资源的位置,而HTTP是用来提交和获取资源。客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:

请求行、请求头部、空行、请求数据

四个部分组成,下图给出了请求报文的一般格式。

HTTP请求示例,可以在浏览器中打开F12,在Request Header中点击View source

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: same-origin
Referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Python
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=4049831E3DB8DE890DFFCA6103FF02C1;

请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP 0.9:只有基本的文本 GET 功能。

HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP 1.1:在 1.0 基础上进行更新,新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

HTTP 2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为 :method、:scheme、:host、:path这些键值对。

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。

常用的请求报头

我这里只给大家提一些常用的,更多的请求头大家可以自行百度

1.Host (主机和端口号)

Host:对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。

2.Upgrade-Insecure-Requests (升级为HTTPS请求)

Upgrade-Insecure-Requests:升级不安全的请求,意思是会在加载 http 资源时自动替换成 https 请求,让浏览器不再显示https页面中的http请求警报。

3.User-Agent (浏览器名称) User-Agent:是客户浏览器的名称

4.Referer (页面跳转处)

Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。

5.Cookie (Cookie) Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能

服务端HTTP响应

HTTP响应也由四个部分组成,分别是: 状态行、消息报头、空行、响应正文

HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0xdbeb11ea000cfef4
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Cxy_all: baidu+642857607c537ed21fa04bcfb54ff6ee
Date: Thu, 02 Jan 2020 06:32:55 GMT
Expires: Thu, 02 Jan 2020 06:32:51 GMT
Server: BWS/1.1
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=6; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1448_21096_30210_30283_30504; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1577946775028760116215846779410554093300
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked

响应状态码

响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

常见状态码:

  • 100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
  • 200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。
  • 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。
  • 400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。
  • 500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。

重点的状态码

  • 200 成功
  • 302 临时重定向
  • 307 永久重定向
  • 404 not found
  • 500 服务器内部错误

<居然讲爬虫>1-爬虫概述相关推荐

  1. python3网络爬虫笔记-爬虫基础原理

    本笔记是学习崔庆才老师的网络爬虫课程的总结 一.HTTP基础原理 1. URI.URL.URN URI: Uniform Resource Identifier,即统一资源标志符 URL:Univer ...

  2. 和我一起学习爬虫之爬虫原理和网站基本知识

                                                      爬虫原理和网站基本知识 一.爬虫简介 1.为什么要做爬虫 1.1.数据的来源 首先请问:都说现在是' ...

  3. 老司机带你学爬虫——Python爬虫技术分享

    什么是"爬虫"? 简单来说,写一个从web上获取需要数据并按规定格式存储的程序就叫爬虫: 爬虫理论上步骤很简单,第一步获取html源码,第二步分析html并拿到数据.但实际操作,老 ...

  4. python从入门到爬虫_python爬虫从入门到放弃(一)之初识爬虫

    什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引. ...

  5. python 反爬机制_python3爬虫--反爬虫应对机制

    python3爬虫--反爬虫应对机制 内容来源于: 前言: 反爬虫更多是一种攻防战,网络爬虫一般有网页爬虫和接口爬虫的方式:针对网站的反爬虫处理来采取对应的应对机制,一般需要考虑以下方面: ①访问终端 ...

  6. Python爬虫 | Python爬虫获取女友图片

    Python爬虫 | Python爬虫获取女友图片 前言 程序说明 二次元女友获取程序 观察网页结构 页面解析 创建图片保存路径 图片下载 格式转换 爬取结果展示 完整程序 前言 (又到了常见的无中生 ...

  7. 爬虫需谨慎!那些你不知道的爬虫反爬虫套路,学起来!

    目录 前言 一.爬虫反爬虫运行现状 1.真实世界的爬虫比例 2.哭笑不得的决策思路 二.爬虫反爬虫技术现状 1.为python平反 2.无法绕开的误伤率 3.前端工程师的逆袭 4.误伤,还是误伤 三. ...

  8. 那些你不知道的爬虫反爬虫套路

    转自:https://zhuanlan.zhihu.com/p/27299841?columnSlug=ctriptech 前言 爬虫与反爬虫,是一个很不阳光的行业. 这里说的不阳光,有两个含义. 第 ...

  9. python3 爬虫_Python3爬虫介绍

    Python3爬虫介绍 一.为什么要做爬虫 首先请问:都说现在是"大数据时代",那数据从何而来? 数据管理咨询公司:麦肯锡.埃森哲.艾瑞咨询 爬取网络数据:如果需要的数据市场上没有 ...

最新文章

  1. 将 SQL Server 存储过程用于数据访问
  2. SVN合并(merge)的使用
  3. springboot集成mybatis源码分析-启动加载mybatis过程(二)
  4. mysql交叉查询教程_史上最简单的 MySQL 教程(二十六)「连接查询(上)」
  5. VMware Linux 共享文件夹 虚拟机无共享文件解决方法
  6. 学习Android逆向
  7. android打印机字体大小,打印自定义文档  |  Android 开发者  |  Android Developers
  8. 计算机网络病毒防范,计算机网络病毒的十项防范措施
  9. 投注测试软件,手机投注软件怎么进行性能测试
  10. Web开发工程师的就业前景
  11. URAL 1099 Work Scheduling
  12. macbook蓝牙pan未连接_蓝牙自动重连机制
  13. 过某交友软件frida反调试
  14. ARM64(M1版)Mac运行MAA以及AzurLaneAutoScript自动化打明日方舟和碧蓝航线
  15. 关于AD20的PCB电路图打印设置
  16. 解决WiFi信号弱小妙招
  17. LEA指令和OFFSET指令
  18. python 如何绘制ppt折线图
  19. 实战分享:一文读懂RS-232总线
  20. Linux软硬链接和软硬限制

热门文章

  1. 微服务之 consul
  2. 基于 Spring Boot 的车牌识别系统(附项目地址)!
  3. 【mmdetection3d】——注册器
  4. 平方数 (sdut oj)
  5. WIFI环境下支付安全问题探析
  6. android 4k播放器开源项目,这15个Android开源库,只有经常逛Github的才知道!
  7. c语言考试的说说带图片致自己,最走心给人希望的说说带图片 明天会更好的励志说说致自己...
  8. 键盘功能键及快捷键的介绍
  9. js之旅(十五)js向上取整、向下取整、四舍五入等
  10. 拼多多店铺留存率太低?这些装修细节你是否都做好了?