爬虫入门:从基础到实战全攻略

🧠 一、爬虫基础概念

1.1 爬虫定义

  • 爬虫(Web Crawler)是模拟浏览器行为,自动向服务器发送请求并获取响应数据的一种程序。
  • 主要用于从网页中提取结构化数据,供后续分析、展示或存储使用。

1.2 爬虫特点

  • 数据碎片化:网页数据分散、不规则。
  • 模拟用户行为:爬虫需要尽可能模拟正常用户的请求行为,以绕过反爬机制。
  • 目标明确:聚焦爬虫有明确的目标网站与数据需求。

1.3 爬虫分类

类型描述
通用爬虫面向大量网站抓取数据,如搜索引擎使用的爬虫
聚焦爬虫有特定目标网站的数据采集任务

聚焦爬虫细分:

  • 功能性爬虫:不直接获取数据,而是实现某些功能(如投票、抢票、短信轰炸等)
  • 数据增量爬虫:持续获取新数据用于分析,常见于新闻资讯、价格监控等领域

1.4 爬虫流程

确认目标URL -> 发送请求 -> 获取响应 -> 提取数据 -> 处理/保存数据↖_____________可能继续解析新的URL__________________↙

1.5 Robots协议

  • 是一个约定俗成的协议文件(robots.txt),用于告知爬虫哪些页面可以访问,哪些不能。
  • 并非强制性标准,但应尊重该协议以避免法律风险。

1.6 爬虫的作用

  • 数据采集(电商价格、天气预报、股票行情等)
  • 软件测试(自动化测试接口)
  • 抢票、刷票、短信轰炸(需谨慎使用)
  • 网络安全(漏洞扫描、安全检测)

🔌 二、网络通信原理

2.1 基本流程

  1. 浏览器输入 URL(如 www.baidu.com
  2. DNS 解析域名,返回 IP 地址
  3. 客户端(浏览器)通过 TCP/IP 协议连接服务器
  4. 发送 HTTP 请求
  5. 服务器处理请求并返回响应
  6. 客户端接收响应并渲染页面(HTML/CSS/JS)

2.2 URL 统一资源定位符

  • 示例:https://www.baidu.com/s?wd=搜索词
  • 结构:
    • 协议(http/https)
    • 域名(主机名)
    • 端口(默认80或443)
    • 路径(路径+查询参数)

2.3 请求方法(HTTP Methods)

方法描述
GET请求获取资源,参数在URL中
POST提交数据给服务器,参数在请求体中
PUT更新资源
DELETE删除资源

2.4 请求组成

  • 请求行(Method + Path + HTTP Version)
  • 请求头(Headers)
  • 请求体(Body,仅POST/PUT等有)

2.5 响应状态码

状态码描述备注
200请求成功表示服务器已成功处理了请求,并返回请求的数据。
302临时重定向服务器要求客户端执行临时重定向(原始为GET请求),新的URL位于响应头中的 Location 字段。
303查看其他位置对于 POST 请求的响应,浏览器会自动重定向至新的 URL,该新地址位于 Location 中。
307临时重定向 (GET)类似于 302,但明确指示 GET 请求应保持原样,不改变为 POST 或其他方法。
403禁止访问服务器理解请求,但拒绝执行它。可能是由于权限不足或被封禁 IP。
404找不到页面服务器找不到与请求 URI 相匹配的任何资源。
500内部服务器错误服务器遇到意外情况,无法完成请求。
503服务不可用通常是因为服务器正在进行维护或过载。可能会在响应中携带 Retry-After 头来提示客户端何时可以再次尝试连接。

📡 三、HTTP & HTTPS 协议详解

3.1 HTTP 协议

  • 超文本传输协议,默认端口:80
  • 明文传输,易被监听或篡改

3.2 HTTPS 协议

  • HTTP + SSL/TLS 加密层,默认端口:443
  • 更安全,防止中间人攻击
  • 性能略低于 HTTP

3.3 SSL/TLS 的作用

  • 数据加密:保证传输过程中的隐私
  • 身份验证:确保客户端连接的是正确的服务器

🕵️‍♂️ 四、浏览器开发者工具(F12)

4.1 使用 F12 查看请求信息

  • 打开“开发者工具” → Network(网络)面板
  • 可查看:
    • 请求 URL
    • 请求方法(GET/POST)
    • 请求头(Headers)
    • 请求体(Body)
    • 响应数据(Response)
    • 响应状态码(Status Code)

4.2 注意事项

  • 实际响应数据才是判断依据,不要依赖 Elements 中的 HTML 渲染结果。
  • 有些数据由 JavaScript 动态加载,需查看 XHR/Fetch 请求。

📦 五、Requests 模块详解

5.1 requests 模块介绍

  • Python 第三方库,用于发送 HTTP 请求
  • 支持 GET、POST、PUT、DELETE 等多种方法
  • 安装命令:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

5.2 常用方法

import requestsurl = "https://www.baidu.com"
response = requests.get(url)print(response.status_code)     # 响应状态码
print(response.text)            # 响应文本(str类型)
print(response.content)         # 响应字节流(bytes类型)
print(response.headers)         # 响应头
print(response.url)             # 最终请求的URL(可能重定向)

5.3 response.text vs response.content

属性类型特点
.textstr自动解码(可能乱码)
.contentbytes原始字节流,适合下载图片、视频等二进制数据

5.4 设置编码格式

response.encoding = 'utf-8'  # 手动指定解码方式

5.5 下载图片示例

url = "https://example.com/image.jpg"
res = requests.get(url)
with open("image.jpg", "wb") as f:f.write(res.content)

🧪 六、User-Agent 和 Headers 设置

6.1 User-Agent 概述

  • 标识客户端身份(浏览器型号、操作系统等)
  • 服务器会根据 UA 判断是否为合法浏览器
  • 如果 UA 不合法,可能被识别为爬虫,返回 403 或 503 错误

6.2 构建请求头

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

6.3 构建 User-Agent 池

  • 防止频繁使用单一 UA 被封禁
  • 示例:
user_agents = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64)...","Mozilla/5.0 (iPad; CPU OS 16_6 like Mac OS X)...",...
]
import random
headers = {"User-Agent": random.choice(user_agents)}

6.4 使用 fake_useragent 库

pip install fake_useragent -i https://pypi.tuna.tsinghua.edu.cn/simple
from fake_useragent import UserAgent
ua = UserAgent()
headers = {"User-Agent": ua.random}

🌐 七、带参数请求(GET)

7.1 参数传递方式

  • URL 编码参数(GET 请求)
  • 表单数据(POST 请求)
元素说明
键(Key)参数名称,如 qform
值(Value)对应的参数值,如 学习QBLH
分隔符使用 = 连接键与值,多个参数之间使用 & 分隔

7.2 URL 参数传参

params = {"q": "学习"}
response = requests.get("https://cn.bing.com/search", params=params)

7.3 urllib.parse 模块

  • 用于手动进行 URL 编码/解码
from urllib.parse import quote, unquoteprint(quote("学习"))        # 输出:%E5%AD%A6%E4%B9%A0
print(unquote("%E5%AD%A6%E4%B9%A0"))  # 输出:学习

🛡️ 八、反爬机制与应对策略

8.1 常见反爬手段

类型描述
IP 封锁识别频繁访问的IP地址
UA 识别检查 User-Agent 是否异常
Cookie 限制登录后才可访问
JS 渲染限制数据由 JavaScript 异步加载
CAPTCHA 验证图形验证码拦截爬虫
请求频率控制单位时间内请求数量限制

8.2 反反爬策略

方法描述
使用代理IP池避免固定IP被封锁
随机 User-Agent模拟不同浏览器
添加 Referer模拟从其他页面跳转而来
设置延迟控制请求频率(time.sleep())
使用 Selenium模拟浏览器操作动态网页
使用 Headless 浏览器如 Puppeteer、Playwright

📌 九、实战案例:构建简单搜索引擎爬虫

import requests
from fake_useragent import UserAgent
from urllib.parse import quoteua = UserAgent()
headers = {"User-Agent": ua.random}keyword = input("请输入你要搜索的内容:")
encoded_kw = quote(keyword)
url = "https://cn.bing.com/search"
params = {"q": encoded_kw}response = requests.get(url, headers=headers, params=params)
print(response.text)

✅ 十、注意事项与最佳实践

  1. 遵守 robots.txt:避免非法抓取敏感数据。
  2. 设置请求间隔:使用 time.sleep() 防止频繁请求。
  3. 使用代理 IP 池:提高稳定性与隐蔽性。
  4. 记录日志:便于调试与追踪问题。
  5. 异常处理:添加 try-except 捕获网络异常。
  6. 合理设置超时时间requests.get(timeout=5)
  7. 定期更新 User-Agent 池
  8. 关注网站结构变化:防止因页面结构调整导致解析失败

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app学习笔记二十一--pages.json中tabBar设置底部菜单项和图标

如果应用是一个多 tab 应用,可以通过 tabBar 配置项指定一级导航栏,以及 tab 切换时显示的对应页。 在 pages.json 中提供 tabBar 配置,不仅仅是为了方便快速开发导航,更重要的是在App和小程序端提升性能。在这两个平台&#xff…

行业分析---小米汽车2025第一季度财报

1 背景 最近几年是新能源汽车的淘汰赛,前短时间比亚迪再次开始了降价,导致一片上市车企的股价大跌,足见车圈现在的敏感度。因此笔者会一直跟踪新势力车企的财报状况,对之前财报分析感兴趣的读者朋友可以参考以下博客:…

Python 解释器安装全攻略(适用于 Linux / Windows / macOS)

目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…

考研系列—操作系统:冲刺笔记(1-3章)

目录 第一章 计算机系统概述 1.基本概念 2.内核态和用户态 3.中断(外中断)、异常(内中断-与当前执行的) 4.系统调用 5.操作系统引导程序 2021年真题: 6.操作系统结构 大纲新增 (1)分层结构 (2)模块化 (3)外核 7.虚拟机 第二章 进程管理 1.画作业运行的顺序和甘…

监控 100 台服务器磁盘内存CPU利用率

监控 100 台服务器磁盘,内存,CPU利用率脚本 以下是一个优化后的监控脚本,用于同时监控100台服务器的磁盘、内存和CPU利用率,并支持并发执行以提高效率: #!/bin/bash # 服务器监控脚本 - 支持并发获取100台服务器系统指标 # 功能…

[5-02-04].第01节:Jmeter环境搭建:

JMeter笔记大纲 Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量 一、JMeter概述: 1.1.JMeter是什么: JMeter是Appache组织使用java开发的一款测试工具 可以用于对服务器、网络或对象模拟巨大的负载…

【兽医处方专用软件】佳易王兽医电子处方软件:高效智能的宠物诊疗管理方案

一、软件概述与核心优势 (一)试用版获取方式 资源下载路径:进入博主头像主页第一篇文章末尾,点击卡片按钮;或访问左上角博客主页,通过右侧按钮获取详细资料。 说明:下载文件为压缩包&#xff…

MapReduce(期末速成版)

起初在B站看3分钟的速成视频,感觉很多细节没听懂。 具体例子解析(文件内容去重) 对于两个输入文件,即文件A 和文件B,请编写MapReduce 程序,对两个文件进行合并,并剔除 其中重复的内容,得到一个新的输出文件…

Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据

隶属文章: Java高级 | (二十二)Java常用类库-CSDN博客 系列文章: Java高级 | 【实验一】Spring Boot安装及测试 最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot …

从零打造AI面试系统全栈开发

🤖 AI面试系统开发完整教程 📋 项目概述 本教程将带你从零开始构建一个完整的AI面试系统,包含前端、后端、AI集成和部署的全流程。 源码地址 技术栈 前端: React TypeScript Vite Vaadin Components后端: Spring Boot Spring Securi…

【硬件】PCIe协议 | 电脑的高速公路

文章目录 PCIe | 外围设备高速互联通道(peripheral component interconnect express)的核心概念和应用 基础概念 1.1 电脑内的”高速“,连接CPU、显卡、SSD(固态硬盘)等核心组件;数据传输速度极快&#xff…

【 Redis | 完结篇 缓存优化 】

前言:本节包含常见redis缓存问题,包含缓存一致性问题,缓存雪崩,缓存穿透,缓存击穿问题及其解决方案 1. 缓存一致性 我们先看下目前企业用的最多的缓存模型。缓存的通用模型有三种: 缓存模型解释Cache Asi…

MySQL访问控制与账号管理:原理、技术与最佳实践

MySQL的安全体系建立在精细的访问控制和账号管理机制上。本文基于MySQL 9.3官方文档,深入解析其核心原理、关键技术、实用技巧和行业最佳实践。 一、访问控制核心原理:双重验证机制 连接验证 (Connection Verification) 客户端发起连接时,MySQL依据user_name@host_name组合进…

Go语言爬虫系列教程4:使用正则表达式解析HTML内容

Go语言爬虫系列教程4:使用正则表达式解析HTML内容 正则表达式(Regular Expression,简称RegEx)是处理文本数据的利器。在网络爬虫中,我们经常需要从HTML页面中提取特定的信息,正则表达式就像一个智能的&quo…

笔记 | docker构建失败

笔记 | docker构建失败 构建报错LOG1 rootThinkPad-FLY:/mnt/e/02-docker/ubunutu-vm# docker build -t ubuntu16.04:v1 . [] Building 714.5s (6/11) docker:default> [internal] load …

CentOS 7.9 安装 宝塔面板

在 CentOS 7.9 上安装 宝塔面板(BT Panel) 的完整步骤如下: 1. 准备工作 系统要求: CentOS 7.x(推荐 7.9)内存 ≥ 1GB(建议 2GB)硬盘 ≥ 20GBroot 权限(需使用 root 用户…

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…

【AI News | 20250604】每日AI进展

AI Repos 1、jaaz Jaaz是一款免费开源的AI设计代理,作为Lovart的本地替代品,它能实现图像、海报、故事板的设计、编辑和生成。Jaaz集成了LLM,可智能生成提示并批量生成图像,支持Ollama、Stable Diffusion等本地及API模型。用户可…

Docker load 后镜像名称为空问题的解决方案

在使用 docker load命令从存档文件中加载Docker镜像时,有时会遇到镜像名称为空的情况。这种情况通常是由于在保存镜像时未正确标记镜像名称和标签,或者在加载镜像时出现了意外情况。本文将介绍如何诊断和解决这一问题。 一、问题描述 当使用 docker lo…

SQL进阶之旅 Day 14:数据透视与行列转换技巧

【SQL进阶之旅 Day 14】数据透视与行列转换技巧 开篇 欢迎来到“SQL进阶之旅”系列的第14天!今天我们将探讨数据透视与行列转换技巧,这是数据分析和报表生成中的核心技能。无论你是数据库开发工程师、数据分析师还是后端开发人员,行转列或列…