第2章:Python爬虫入门——HTTP协议基础、Requests库入门、第一个爬虫程序

2.1 爬虫到底是什么?

说实话,很多人一听到「爬虫」就觉得很高大上。其实说白了,爬虫就是模拟浏览器去访问网页,然后把网页上的数据拿回来。

你想想看,我们平时用浏览器看网页,眼睛看到的是排版好的图文。但浏览器背后干了什么?它发了一个请求给服务器,服务器返回一堆HTML代码,浏览器再把代码渲染成漂亮的页面。

爬虫做的事情更直接——它跳过渲染这一步,直接拿回HTML代码,然后从中提取我们需要的数据。

我个人习惯把爬虫分成三步:请求 → 解析 → 存储。这一章我们先搞定第一步——请求。

核心要点:爬虫不是黑魔法,它只是自动化地重复「浏览器的工作」。你手动能看到的网页,爬虫理论上都能拿到。

2.2 HTTP协议——爬虫的「交通规则」

爬虫和服务器之间怎么交流?靠的就是HTTP协议。你可以把它理解成一套约定好的「暗号」。

2.2.1 请求与响应

每次访问网页,本质上就是一次请求-响应的循环:

  • 客户端(爬虫) → 发送请求 → 服务器
  • 服务器 → 返回响应 → 客户端(爬虫)

我在项目中遇到过不少新手,以为爬虫能直接拿到网页渲染后的数据。其实服务器返回的只是原始HTML,JavaScript生成的内容需要额外处理。嗯,这个后面会讲到。

2.2.2 常见的HTTP方法

方法 作用 爬虫常用吗?
GET 获取资源(最常见) ✅ 几乎天天用
POST 提交数据(登录、搜索) ✅ 经常用
PUT 更新资源 ❌ 很少用
DELETE 删除资源 ❌ 基本不用

你写爬虫时,90%的情况只用GET和POST。GET就像你打开一个链接,POST就像你填完表单点提交。

2.2.3 状态码——服务器在跟你说话

服务器每次响应都会带一个状态码。我刚开始学的时候记不住,后来发现其实就记住几个关键的就行:

  • 200 OK:一切正常,数据拿到了
  • 301/302:页面搬家了,自动跳转
  • 403 Forbidden:服务器不让你访问(反爬了)
  • 404 Not Found:页面不存在
  • 500:服务器自己出问题了

小技巧:写爬虫时,我习惯先打印一下状态码。如果看到403,赶紧检查是不是被反爬了。别傻乎乎地一直发请求。

2.3 Requests库——Python爬虫的「瑞士军刀」

Python里发HTTP请求有很多方式,但Requests库是最简单、最优雅的。没有之一。

2.3.1 安装

pip install requests

就这一行命令,搞定。

2.3.2 发送GET请求

来,直接看代码:

import requests

url = "https://httpbin.org/get"
response = requests.get(url)

print(response.status_code)   # 200
print(response.text)          # 返回的HTML/JSON内容
print(response.headers)       # 响应头信息

就这么简单。三行代码,一个网页就抓回来了。

我曾经在项目里看到有人用urllib写了几十行代码,就为了发一个GET请求。用Requests的话,三行搞定。所以别跟自己过不去。

2.3.3 发送POST请求

POST请求稍微复杂一点,因为要带数据:

import requests

url = "https://httpbin.org/post"
data = {"username": "admin", "password": "123456"}
response = requests.post(url, data=data)

print(response.json())  # 服务器返回的JSON数据

注意这里用了data参数。如果是JSON格式的数据,用json参数:

response = requests.post(url, json={"key": "value"})

2.3.4 设置请求头——伪装成浏览器

很多网站会检查请求头,如果发现你是爬虫,直接拒绝访问。最常见的反爬手段就是检查User-Agent。

我建议你每次写爬虫都带上请求头,养成习惯:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
response = requests.get(url, headers=headers)

避坑指南:我曾经因为没加请求头,被一个网站封了IP整整一天。后来才发现,人家只是检查了User-Agent。加一行代码就解决了。所以——请求头一定要加!

2.4 第一个爬虫程序——抓取网页标题

理论说完了,咱们动手写一个真正的爬虫。目标:抓取一个网页的标题。

2.4.1 完整代码

import requests

# 目标网址
url = "https://example.com"

# 伪装成浏览器
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}

# 发送请求
response = requests.get(url, headers=headers)

# 检查是否成功
if response.status_code == 200:
    # 从HTML中提取标题(简单方法)
    html = response.text
    start = html.find("<title>") + len("<title>")
    end = html.find("</title>")
    title = html[start:end]
    print(f"网页标题是:{title}")
else:
    print(f"请求失败,状态码:{response.status_code}")

运行一下,你会看到类似这样的输出:

网页标题是:Example Domain

恭喜你!你已经写出了第一个爬虫程序。

2.4.2 代码拆解

这段代码虽然简单,但包含了爬虫的核心流程:

  1. 准备:确定URL,设置请求头
  2. 请求:用requests.get()发送请求
  3. 检查:判断状态码是否为200
  4. 提取:从HTML中找出标题
  5. 输出:打印结果

你想想看,以后爬任何网站,本质上都是这个流程。只是提取数据的方式会更复杂——我们会用BeautifulSoup、XPath这些工具。但骨架不变。

记住这个流程:准备 → 请求 → 检查 → 提取 → 输出。这是所有爬虫程序的通用模板。

2.5 本章知识体系

下面这张图帮你理清这一章的核心逻辑:

第2章:Python爬虫入门 - 知识体系 爬虫入门 HTTP协议基础 Requests库入门 第一个爬虫程序 请求与响应 GET / POST 状态码 安装与导入 GET请求 POST请求 请求头设置 提取标题 状态码检查 核心流程:准备 → 请求 → 检查 → 提取 → 输出

2.6 本章小结

这一章我们走完了爬虫的第一步。你学会了:

  • HTTP协议的基本概念——请求、响应、状态码
  • Requests库的安装和基本用法——GET和POST
  • 如何设置请求头来伪装成浏览器
  • 写了一个真正的爬虫程序——抓取网页标题

说实话,能坚持到这里你已经很棒了。很多人在安装库那一步就放弃了。你想想看,你已经跑通了第一个爬虫,接下来就是不断深入的问题了。

给你的建议:别急着往下学。把今天写的代码多跑几遍,换几个不同的网址试试。看看哪些网站能成功,哪些会报错。报错就是学习的机会。

嗯,这一章就到这里。代码写起来,别光看。

可可精品资料库