Administrator
发布于 2026-06-21 / 1 阅读
0
0

Python requests 爬虫:静态网页数据爬取入门

一、前言

前面我们学习了 Python 基础、文件处理、GUI 工具开发,本篇进入网络爬虫实战。借助requests第三方库,实现访问网页、获取页面源码、提取文本内容,适合抓取静态网页文字、资讯、数据,全程零基础可上手。

二、环境准备:安装 requests 库

requests不是 Python 自带标准库,需要用 pip 安装,打开 CMD 执行:

bash

运行

# 国内清华源加速安装
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,代码中通过import requests导入即可使用。

三、爬虫基础概念

  1. 请求头 User-Agent:模拟浏览器访问,防止网站识别出爬虫直接拦截

  2. get 请求:最常用,用于获取网页页面内容(浏览网页本质就是 GET 请求)

  3. 响应状态码

    • 200:请求成功,正常获取页面

    • 404:页面不存在

    • 403:服务器拒绝访问(反爬虫拦截)

  4. 响应文本 text:网页完整 HTML 源代码,所有文字、图片链接都存放在这里

四、基础案例:访问网页并打印源码

1. 基础请求(不带请求头,极易被拦截)

python

运行

import requests

# 目标网页地址
url = "https://www.baidu.com"
# 发送get请求
response = requests.get(url)

# 打印响应状态码
print("状态码:", response.status_code)
# 打印网页源码(前500字符,避免输出过长)
print(response.text[:500])

2. 标准规范写法:添加浏览器 UA 伪装(必加)

网站会校验访问来源,不加 User-Agent 大概率返回 403 错误

python

运行

import requests

# 请求头,模拟Chrome浏览器
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
url = "https://www.baidu.com"

# 携带请求头发送请求
res = requests.get(url, headers=headers)
# 设置编码,解决中文乱码
res.encoding = "utf-8"

if res.status_code == 200:
    print("网页访问成功!")
    # 打印网页标题附近内容
    html = res.text
    print(html[:800])
else:
    print(f"访问失败,状态码:{res.status_code}")

五、提取网页标题简易示例

通过字符串切片,快速提取网页<title>标签内的网页标题

python

运行

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36"
}
url = "https://www.baidu.com"
res = requests.get(url, headers=headers)
res.encoding = "utf-8"

html = res.text
# 截取<title>和</title>中间文字
start = html.find("<title>") + len("<title>")
end = html.find("</title>")
title = html[start:end]
print("网页标题:", title)

六、将爬取到的网页源码保存到本地 TXT

结合之前学的文件操作,把页面代码持久化保存到本地,方便离线查看

python

运行

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36"
}
url = "https://www.baidu.com"

try:
    res = requests.get(url, headers=headers, timeout=10)
    res.encoding = "utf-8"
    # 写入本地文件
    with open("百度首页源码.txt", "w", encoding="utf-8") as f:
        f.write(res.text)
    print("网页源码已保存到本地!")
except Exception as e:
    print("爬取失败:", e)

参数timeout=10:设置 10 秒超时,网络卡顿不会无限等待。

七、带参数 GET 请求(搜索页面通用)

很多网址通过?key=xxx传递搜索内容,requests 支持 params 自动拼接参数

python

运行

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36"
}
url = "https://www.baidu.com/s"
# 搜索参数
params = {
    "wd": "Python爬虫教程"
}

res = requests.get(url, headers=headers, params=params)
res.encoding = "utf-8"
print("当前搜索页面地址:", res.url)
print("页面前600字符:", res.text[:600])

八、新手爬虫避坑指南

  1. 中文乱码:添加res.encoding = "utf-8"指定编码

  2. 403 拒绝访问:请求头缺少 User-Agent,必须配置 headers 模拟浏览器

  3. 请求超时卡死:get 方法添加timeout=10限制等待时长

  4. 频繁访问被封 IP:短时间不要循环大量爬取,可导入 time 模块time.sleep(1)每次请求暂停 1 秒

  5. 动态网页空白:requests 只能爬静态 HTML,JS 动态加载数据需要 Selenium(进阶内容)

九、综合完整可运行案例:爬取并保存网页标题 + 源码

python

运行

import requests
import time

def crawl_web(url, save_file="page.txt"):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }
    try:
        # 发送网络请求
        response = requests.get(url, headers=headers, timeout=10)
        response.encoding = "utf-8"
        html = response.text

        # 提取标题
        t_start = html.find("<title>") + 7
        t_end = html.find("</title>")
        page_title = html[t_start:t_end]

        # 写入文件
        with open(save_file, "w", encoding="utf-8") as f:
            f.write(f"网页标题:{page_title}\n")
            f.write("=" * 50 + "\n")
            f.write(html)
        print(f"爬取完成!标题:{page_title},文件已保存为 {save_file}")
    except Exception as err:
        print(f"爬取出错:{err}")

# 调用函数
if __name__ == "__main__":
    target_url = input("请输入要爬取的网页地址:")
    crawl_web(target_url, "网页源码.txt")
    time.sleep(1)

十、法律与规范提醒

  1. 仅用于学习、爬取公开无版权静态页面,禁止抓取付费、隐私、企业涉密数据

  2. 遵守网站robots.txt爬虫协议,不高频暴力访问服务器

  3. 商业用途爬虫需要网站官方授权,私自大规模抓取存在法律风险

十一、下期预告

下一篇:Python 自动化办公:批量处理 Excel 表格数据实战,用代码快速读写、统计表格内容。


评论