爬虫是指通过程序自动化地从互联网上获取数据的过程。
基本的爬虫流程可以概括为以下几个步骤:
- 发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。
- 解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面进行解析,提取出需要的数据。
- 存储数据:将解析出来的数据存储到本地或者数据库中,以供后续分析或使用。
HTTP 协议是爬虫获取数据的基础,爬虫程序需要构造 HTTP 请求,发送到目标服务器,获取数据并进行解析。
HTTP 请求主要由请求头和请求体组成:
- 请求头包含请求方法、目标 URL、HTTP 版本号以及请求头信息等;
- 请求体则是携带了请求参数和请求数据。
在构造 HTTP 请求时,需要注意目标网站可能会对爬虫进行限制,如设置反爬虫机制,通过增加请求头中的 User-Agent 字段、设置请求时间间隔、使用代理 IP 等方式可以降低被限制的风险。
文章目录
- HTTP 协议介绍
- http 协议 请求行,请求头,请求体
- HTTP 协议响应
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 篇原创博客
从订购之日起,案例 5 年内保证更新
- ⭐️ Python 爬虫 120,点击订购 ⭐️
- ⭐️ 爬虫 100 例教程,点击订购 ⭐️