爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例

举报
梦想橡皮擦 发表于 2023/05/29 11:49:05 2023/05/29
【摘要】 爬虫是指通过程序自动化地从互联网上获取数据的过程。基本的爬虫流程可以概括为以下几个步骤:发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面进行解析,提取出需要的数据。存储数据:将解析出来的数据存储到本地或者数据库中,以供后续分析或使用。HTTP 协议是爬虫获取数据的基础,爬虫程...

爬虫是指通过程序自动化地从互联网上获取数据的过程。
基本的爬虫流程可以概括为以下几个步骤:

  1. 发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。
  2. 解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面进行解析,提取出需要的数据。
  3. 存储数据:将解析出来的数据存储到本地或者数据库中,以供后续分析或使用。

HTTP 协议是爬虫获取数据的基础,爬虫程序需要构造 HTTP 请求,发送到目标服务器,获取数据并进行解析。
HTTP 请求主要由请求头请求体组成:

  • 请求头包含请求方法、目标 URL、HTTP 版本号以及请求头信息等;
  • 请求体则是携带了请求参数和请求数据。

在构造 HTTP 请求时,需要注意目标网站可能会对爬虫进行限制,如设置反爬虫机制,通过增加请求头中的 User-Agent 字段、设置请求时间间隔、使用代理 IP 等方式可以降低被限制的风险。

@[toc]

HTTP 协议介绍

HTTP(HyperText Transfer Protocol)是一种应用层协议,用于在客户端和服务器之间传输超文本数据。
HTTP 协议是一个基于请求-响应模型的协议,客户端发送 HTTP 请求到服务器,服务器返回 HTTP 响应。

HTTP 请求由三部分组成:请求行请求头请求体

  • 请求行包括请求方法、URL 和 HTTP 版本号;
  • 请求头包括一些关于请求的元数据,比如 User-Agent、Cookie 等;
  • 请求体则包含请求的数据。

HTTP 响应也由三部分组成:状态行响应头响应体

  • 状态行包括响应的状态码和状态文本;
  • 响应头包括一些关于响应的元数据,比如 Server、Content-Type 等;
  • 响应体则包含响应的数据。

下面是一个简单的使用 Python 发送 HTTP GET 请求的例子:

import requests

url = 'http://pachong.vip'
response = requests.get(url)
print(response.status_code)  # 打印状态码
print(response.headers)  # 打印响应头
print(response.text)  # 打印响应体

上面的代码使用 requests 库发送一个 HTTP GET 请求到 pachong.vip,并输出了状态码、响应头和响应体。
requests 库是 Python 中用于发送 HTTP 请求的常用库,它提供了简单易用的 API,可以轻松地发送 HTTP 请求并处理 HTTP 响应。

http 协议 请求行,请求头,请求体

HTTP 请求可以分为三部分:请求行、请求头和请求体

如果 HTTP 协议是一部动漫的话,请求行就相当于开头的标题,请求头就相当于主演的演员表,请求体就是动漫的具体内容。

请求行包含三个部分,分别是请求方法、请求 URL 和 HTTP 协议版本。

把请求行想象成向一个迷路的人询问路线的场景,请求方法就是你说的话,“请问去哪里”请求 URL 就是你想去的目的地,“我要去机场”,HTTP 协议版本就是你们沟通的语言,“用中文交流”

请求头可以包含多个键值对,用来传递请求的附加信息,比如 User-Agent、Referer 等。

把请求头想象成你在约会时候的小手册,里面包含了你的身份、约会地点等信息。如果你带上了自己的照片,那么 User-Agent 就相当于照片里的头像,是你的标识;Referer 就相当于你约会时对方提供的位置,让你更清楚地了解约会地点的信息。

请求体是 POST 请求中传递参数的部分

把请求体想象成你向对象表白时的话语,里面包含了你的真心话。比如你向喜欢的人表白时说的“我喜欢你”,这句话就相当于请求体中的内容。

如果你使用 Python 发送 HTTP 请求,可以使用 requests 库。下面是一个例子,访问爬虫训练场

import requests

url = "http://pachong.vip"
response = requests.get(url)

print(response.content)

HTTP 协议响应

当我们使用 Python 进行网络爬取时,经常需要通过 HTTP 请求来获取服务器返回的数据。而服务器返回的响应通常也是由三部分组成:状态行、响应头和响应体。

下面是一个用 Python 模拟发送 HTTP 请求,并获取响应的示例代码:

import requests

# 发送 HTTP 请求
response = requests.get('https://pachong.vip')

# 获取响应状态行
status_line = response.status_code

# 获取响应头
headers = response.headers

# 获取响应体
content = response.text

print(f'响应状态行:{status_line}')
print(f'响应头:{headers}')
print(f'响应体:{content}')

这个代码中,使用 Python 的 requests 库来发送 HTTP 请求,获取了服务器返回的响应。
然后通过 response.status_code、response.headers 和 response.text 分别获取了响应的状态行、响应头和响应体,并将它们打印输出。

如果将这个场景生活化,例子如下。

  • 我们请求了三体的官网,服务器给你回了一份响应,这份响应分为三个部分,就像是三体人对你的回答。

  • 第一条是状态行,相当于三体人告诉你了这个回答的状态,比如是成功还是失败。就像是三体人告诉你他们有没有你想要的技术。

  • 第二条是响应头,相当于三体人告诉你一些额外的信息,比如他们的地址、星球坐标等等,就像是三体人告诉你一些和技术无关但是你也需要知道的信息。

  • 第三条响应体,相当于三体人给你展示了他们的星球,比如是充满火或者是充满水的图片。

当你收到这份响应之后,你可以根据里面的信息决定接下来该怎么做,是继续呆着还是逃跑。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 1122 篇原创博客

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。