Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解

目录

      • 一、背景与需求‌
      • 二、静态页面抓取的核心流程‌
      • 三、requests库基础与请求头配置‌
        • 3.1 安装与基本请求
        • 3.2 请求头核心参数解析‌
        • 3.3 自定义请求头实战
      • 四、实战案例:抓取豆瓣读书Top250‌
        • 1. 目标‌
        • 2. 代码实现
        • 3. 技术要点‌
      • 五、高阶技巧与反反爬策略‌
        • 5.1 动态Cookie维护‌
        • 5.2 随机请求头轮换‌
        • 5.3 请求频率控制‌
      • 六、注意事项与合规建议‌
        • 1. 法律合规‌:
        • 2. 道德规范‌:
        • 3. 异常监控‌:
      • 七、总结与扩展‌
        • 1. 核心收获‌:
        • 2. 进阶方向‌:
        • Python爬虫相关文章(推荐)

一、背景与需求‌

在数据驱动的互联网时代,静态页面抓取是获取公开数据的核心手段。然而,大多数网站会对非浏览器请求进行拦截,例如通过检测请求头(User-Agent/Cookie)识别爬虫行为。若未正确模拟浏览器请求,轻则返回异常数据,重则触发IP封禁。

‌本文目标‌:基于Python的requests库,详解如何通过设置请求头绕过基础反爬机制,高效抓取静态页面数据,并提供可复用的代码模板与避坑指南。

二、静态页面抓取的核心流程‌

静态页面抓取的本质是‌模拟浏览器发送HTTP请求‌,其核心步骤包括:

  1. ‌发送请求‌:使用requests.get()或requests.post()获取网页内容。
  2. ‌解析响应‌:通过状态码(如200/403/404)判断请求状态,提取HTML文本。
  3. ‌数据清洗‌:结合正则表达式、BeautifulSoup或XPath解析目标数据。

‌关键问题‌

  • ‌如何避免被封禁?‌ → 伪装请求头(User-Agent/Cookie)。
  • ‌如何处理登录状态?‌ → 携带Cookie维持会话。

三、requests库基础与请求头配置‌

3.1 安装与基本请求
# 安装requests库
pip install requests# 发送GET请求示例
import requests
url = "https://www.example.com"
response = requests.get(url)
print(response.status_code)  # 输出状态码
print(response.text)         # 输出HTML内容
3.2 请求头核心参数解析‌

请求头(Headers)是HTTP请求的元数据,用于告知服务器客户端信息。爬虫需重点关注以下字段:

字段作用示例值
User-Agent标识客户端类型(浏览器/设备),帮助服务器识别客户端环境Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Cookie维持会话状态,包含登录凭证、页面偏好等关键信息sessionid=abc123; token=xyz789
Referer声明请求来源页面,用于防跨站请求伪造(CSRF)等安全机制https://www.google.com
3.3 自定义请求头实战
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","Cookie": "Hm_lvt_abc=123456; Hm_lpvt_abc=654321","Referer": "https://www.baidu.com/"
}# 发送带自定义请求头的GET请求
response = requests.get(url, headers=headers)

‌如何获取合法User-Agent?‌

  1. 浏览器开发者工具(F12 → Network → Headers → User-Agent)。
  2. 第三方库fake_useragent随机生成:
from fake_useragent import UserAgent
ua = UserAgent()
headers = {"User-Agent": ua.chrome}

‌如何获取Cookie?‌

  1. ‌手动获取‌:登录目标网站后,从浏览器开发者工具复制Cookie。
  2. ‌自动获取‌:通过requests.Session模拟登录流程(需分析登录接口)。

四、实战案例:抓取豆瓣读书Top250‌

1. 目标‌

提取书籍名称、评分、短评数量及出版信息。

2. 代码实现
import requests
from bs4 import BeautifulSoupurl = "https://book.douban.com/top250"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","Cookie": "your_cookie_here"  # 如需登录后数据,需填写有效Cookie
}response = requests.get(url, headers=headers)
if response.status_code == 200:soup = BeautifulSoup(response.text, "html.parser")books = []for item in soup.find_all("tr", class_="item"):title = item.find("div", class_="pl2").a["title"].strip()rating = item.find("span", class_="rating_nums").textcomment_num = item.find("span", class_="pl").text.split()[-1].strip("()")publish_info = item.find("p", class_="pl").text.split("/")[-3:]books.append({"title": title,"rating": rating,"comment_num": comment_num,"publish_info": publish_info})print(books[:3])  # 输出前3条数据
else:print(f"请求失败,状态码:{response.status_code}")
3. 技术要点‌
  • ‌User-Agent伪装‌:绕过豆瓣基础反爬检测。
  • ‌异常处理‌:检查状态码,避免解析失败导致崩溃。
  • ‌数据清洗‌:通过字符串分割提取出版年份、出版社等信息。

五、高阶技巧与反反爬策略‌

5.1 动态Cookie维护‌

使用requests.Session对象自动管理Cookie:

session = requests.Session()
# 模拟登录(需分析登录接口)
login_data = {"username": "user", "password": "pass"}
session.post("https://www.example.com/login", data=login_data)
# 后续请求自动携带Cookie
response = session.get("https://www.example.com/protected-page")
5.2 随机请求头轮换‌

结合fake_useragent与代理IP,降低封禁风险:

from fake_useragent import UserAgent
import randomua = UserAgent()
headers_list = [{"User-Agent": ua.chrome}, {"User-Agent": ua.firefox}]# 随机选择请求头
headers = random.choice(headers_list)
response = requests.get(url, headers=headers)
5.3 请求频率控制‌

添加随机延迟,模拟人类操作:

import time
import randomfor page in range(1, 6):response = requests.get(f"https://example.com/page/{page}", headers=headers)time.sleep(random.uniform(1, 3))  # 随机延迟1~3秒

六、注意事项与合规建议‌

1. 法律合规‌:
  • 遵守robots.txt协议(如豆瓣禁止部分路径抓取)。
  • 禁止采集个人隐私或商业机密数据。
2. 道德规范‌:
  • 控制请求频率,避免对目标服务器造成压力。
  • 注明数据来源,尊重版权。
3. 异常监控‌:
  • 捕获requests.exceptions(如超时、连接错误)。
  • 监控响应内容是否包含反爬提示(如“请验证身份”)。

七、总结与扩展‌

1. 核心收获‌:
  • 请求头(User-Agent/Cookie)是静态页面抓取的‌生命线‌,需精准配置。
  • requests库灵活易用,结合BeautifulSoup可实现快速数据解析。
2. 进阶方向‌:
  • ‌动态页面抓取‌:学习Selenium或Playwright处理JavaScript渲染。
  • ‌分布式爬虫‌:使用Scrapy-Redis提升抓取效率。
  • ‌数据存储‌:集成MySQL/MongoDB持久化数据。
Python爬虫相关文章(推荐)
Python爬虫介绍Python爬虫(1)Python爬虫:从原理到实战,一文掌握数据采集核心技术
HTTP协议解析Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战
HTML核心技巧Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
CSS核心机制Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用

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

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

相关文章

HTML给图片居中

在不同的布局场景下&#xff0c;让 <img> 元素居中的方法有所不同。下面为你介绍几种常见的居中方式 1. 块级元素下的水平居中 如果 <img> 元素是块级元素&#xff08;可以通过 display: block 设置&#xff09;&#xff0c;可以使用 margin: 0 auto 来实现水平居…

【高频考点精讲】前端构建工具对比:Webpack、Vite、Rollup和Parcel

前端构建工具大乱斗:Webpack、Vite、Rollup和Parcel谁是你的菜? 【初级】前端开发工程师面试100题(一) 【初级】前端开发工程师面试100题(二) 【初级】前端开发工程师的面试100题(速记版) 最近在后台收到不少同学提问:“老李啊,现在前端构建工具这么多,我该选哪个?…

赶紧收藏!教您如何用 GitHub 账号,获取永久免费的 Docker 容器!!快速搭建我们的网站/应用!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 永久免费的 Docker 容器 📒🚀 注册与登录➕ 创建 Docker 容器💻 部署你的网站🔑 注意事项💡 使用场景⚓️ 相关链接 ⚓️📖 介绍 📖 还在为搭建个人网站寻找免费方案而烦恼? 今天发现一个宝藏平台!只需一个 Git…

Java大师成长计划之第3天:Java中的异常处理机制

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在 Java 编程中&#xff0c;异常处理…

大数据去重

实验4 大数据去重 1.实验目的 通过Hadoop数据去重实验&#xff0c;学生可以掌握准备数据、伪分布式文件系统配置方法&#xff0c;以及在集成开发环境Eclipse中实现Hadoop数据去重方法。 2.实验要求 了解基于Hadoop处理平台的大数据去重过程&#xff0c;理解其主要功能&…

http协议、全站https

一、http协议 1、为何要学http协议? 用户用浏览器访问网页,默认走的都是http协议,所以要深入研究web层,必须掌握http协议 2、什么是http协议 1、全称Hyper Text Transfer Protocol(超文本传输协议) ### 一个请求得到一个响应包 普通…

使用 Logstash 迁移 MongoDB 数据到 Easysearch

大家好&#xff01;在前面的文章中&#xff0c;我们已经详细介绍了如何通过 Logstash 和 Canal 工具实现 MySQL 数据向 Easysearch 的迁移。如果您正在使用 MongoDB 作为数据存储&#xff0c;并希望将其数据迁移到 Easysearch 中&#xff0c;这篇指南或许能为您提供一些帮助。 …

亚马逊英国站FBA费用重构:轻小商品迎红利期,跨境卖家如何抢占先机?

一、政策背景&#xff1a;成本优化成平台与卖家共同诉求 2024年4月&#xff0c;亚马逊英国站&#xff08;Amazon.co.uk&#xff09;发布近三年来力度最大的FBA费用调整方案&#xff0c;标志着英国电商市场正式进入精细化成本管理时代。这一决策背后&#xff0c;是多重因素的叠…

使用Qt Quick Controls创建自定义日历组件

目录 引言相关阅读1. DayOfWeekRow2. MonthGrid3. WeekNumberColumn 项目结构及实现工程结构图代码实现及解析1. 组件封装2. 主界面实现 运行效果 总结下载链接 引言 Qt6 Quick框架提供了一套丰富的日历相关组件&#xff0c;包括 MonthGrid、DayOfWeekRow 和 WeekNumberColumn…

【AI微信小程序开发】大转盘小程序项目代码:自设转盘选项和概率(含完整前端+后端代码)

系列文章目录 【AI微信小程序开发】AI减脂菜谱小程序项目代码:根据用户身高/体重等信息定制菜谱(含完整前端+后端代码)【AI微信小程序开发】AI菜谱推荐小程序项目代码:根据剩余食材智能生成菜谱(含完整前端+后端代码)【AI微信小程序开发】图片工具小程序项目代码:图片压…

redis相关问题整理

Redis 支持多种数据类型&#xff1a; 字符串 示例&#xff1a;存储用户信息 // 假设我们使用 redis-plus-plus 客户端库 auto redis Redis("tcp://127.0.0.1:6379"); redis.set("user:1000", "{name: John Doe, email: john.doeexample.com}"…

Vue-组件的懒加载,按需加载

在Vue项目中实现组件的懒加载&#xff08;也称为按需加载或代码分割&#xff09;&#xff0c;可以大大提升应用的加载速度和性能。懒加载主要通过Webpack的代码分割功能实现&#xff0c;特别是使用动态导入&#xff08;import()语法&#xff09;。 为什么要使用懒加载&#xf…

C# new Bitmap(32043, 32043, PixelFormat.Format32bppArgb)报错:参数无效,如何将图像分块化处理?

C#处理非常大的图像&#xff08;如 32043x32043 像素&#xff09;时&#xff0c;确实需要采取分块化处理的方法来避免内存不足的问题。分块化处理可以将大图像分割成多个较小的块&#xff0c;分别进行处理和保存&#xff0c;最后再合并这些块以形成完整的图像。以下是一个详细的…

如何使用极狐GitLab 的外部状态检查功能?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 外部状态检查 (ULTIMATE ALL) pending 状态引入于极狐GitLab 16.5 pending 状态检查的超时时间为两分钟引入于极狐GitLab 16…

深入探索Spark-Streaming:从Kafka数据源创建DStream

在大数据处理领域&#xff0c;Spark-Streaming是一个强大的实时流处理框架&#xff0c;而Kafka作为高性能的分布式消息队列&#xff0c;二者结合能实现高效的数据处理。今天就来聊聊Spark-Streaming中从Kafka数据源创建DStream的相关知识。 早期&#xff0c;Spark-Streaming通过…

Kafka 详解

1.基本概念&#xff1a;Kafka 是分布式发布 - 订阅消息系统&#xff0c;具有高吞吐量、可扩展性等优势&#xff0c;支持点对点和发布订阅两种消息模式&#xff0c;涉及 Broker、Topic、Partition 等多种角色。 2.安装步骤&#xff1a;需先安装 JDK 和 Zookeeper&#xff0c;下…

uniapp-商城-34-shop 购物车 选好了 进行订单确认整体

在shop页面选中商品添加到购物车&#xff0c;可选好后&#xff0c;进行确认和支付。具体呈现在shop页面。 1 购物车栏 shop页面代码&#xff1a; 购物车代码&#xff1a; 代码&#xff1a; <template><view><view class"carlayout"><!-- 车里…

数据仓库是什么?数据仓库架构有哪些?

目录 数据仓库是什么&#xff1f;数据仓库架构有哪些&#xff1f; 一、数据仓库是什么&#xff1f; 二、数据仓库的架构分层 1. 获取层 2. 数据层 3. 应用层 4. 访问层 三、数据仓库的价值体现 1.决策支持 2.业务优化 3.提升竞争力 四、数据仓库的未来发展趋势 总…

单片机——使用printf调试

配置printf()输出函数 1、来自于<stdio.h> 2、运行C语言时&#xff0c;输出到终端 3、单片机没有终端&#xff0c;需要使用串口&#xff0c;将要输出的内容传到电脑&#xff08;串口调试助手&#xff09;上 例子如下 #include <stdio.h> #include &qu…

人脸识别考勤系统实现教程:基于Face-Recognition、OpenCV与SQLite

引言 随着人工智能技术的飞速发展&#xff0c;人脸识别技术已广泛应用于安防、金融、教育等多个领域。本文将带领大家利用Python的face-recognition库、OpenCV和SQLite数据库&#xff0c;从零开始构建一个具备异常报警功能的人脸识别考勤系统。该系统能够实时检测视频流中的人…