<居然讲爬虫>1-爬虫概述

本文介绍Python爬虫的基础知识,涵盖为何学习爬虫、Python作为爬虫语言的优势、爬虫的基本概念及工作原理,并探讨了HTTP与HTTPS协议的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

前面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这些键值对。

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

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

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 服务器内部错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值