Python爬虫怎么抓网页_requests.get()获取网页HTML源码实战教程

云宇酱_6970

云宇酱_6970

2026-03-22

902人浏览

原创

requests.get() 返回乱码或空内容主因是编码识别错误,应优先用 response.content 配合 chardet 或 charset_normalizer 推测编码再解码;它无法获取 JS 渲染内容,需查源代码或抓取 API;须设 timeout、重试机制及正确 Cookie/Referer 等头信息。

python爬虫怎么抓网页_requests.get()获取网页html源码实战教程

requests.get() 返回空内容或乱码怎么办

不是请求失败,而是响应体没被正确解码。requests 默认用 response.encoding 解码,但很多网页的 Content-Type 没带 charset,或者 HTML meta 里声明的编码和实际不符,导致 response.text 出现乱码或截断。

实操建议:

  • 优先用 response.content(bytes)配合 chardet.detect() 或 charset_normalizer.from_bytes() 推测编码,再手动 decode
  • 如果知道网页是 UTF-8,直接 response.content.decode('utf-8'),比 response.text 更可靠
  • 遇到 GBK/GB2312 网页(尤其国内老站),别信 response.apparent_encoding,它常误判;改用 response.content.decode('gbk', errors='ignore')
  • 设置 headers={'User-Agent': 'Mozilla/5.0...'},否则有些网站返回 403 或空页面

为什么 requests.get() 抓不到 JavaScript 渲染的内容

requests 是纯 HTTP 客户端,不执行 JS、不解析 DOM、不维护会话上下文。它拿到的只是服务器返回的原始 HTML 字符串,所有通过 fetch、axios 或 Vue/React 动态插入的内容,它一概看不见。

实操建议:

  • 先用浏览器「查看页面源代码」(Ctrl+U),确认目标数据是否在初始 HTML 里;如果只在「元素」面板里出现,说明是 JS 渲染的,requests 无能为力
  • 检查 Network 面板,找 XHR/Fetch 请求,复制其 URL 和 headers,用 requests.get() 直接请求那个接口(常返回 JSON)
  • 真需要渲染能力时,换 selenium 或 playwright,但代价是慢、重、易被反爬;requests 永远只适合静态 HTML 或 API 抓取

超时、重试、连接错误这些基础问题怎么稳住

网络不稳定时,requests.get() 默认会卡死(无 timeout)、不重试、遇到 DNS 失败就抛 ConnectionError,线上脚本很容易崩。

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载

实操建议:

  • 必须加 timeout=(3, 7):第一个数字是连接超时,第二个是读取超时;不要只写一个数字,否则可能卡在大文件下载上
  • 用 urllib3.util.Retry 配合 requests.adapters.HTTPAdapter 实现自动重试,重点重试 ConnectTimeout 和 ReadTimeout,别盲目重试 404 或 500
  • DNS 缓存问题常见于容器或云函数环境,可加 session.mount('http://', adapter) 统一控制
  • 别在循环里反复新建 Session,复用它才能复用连接池,否则并发高了直接触发 Max retries exceeded

Cookie、登录态、Referer 这些头信息怎么传才不被拒

很多网站靠 Cookie、Referer、Origin 判断请求合法性。光有 User-Agent 不够,漏掉关键字段就会返回 302 跳登录页或 403。

实操建议:

  • 登录后抓包,把浏览器发出的完整 Cookie 字符串(如 'sessionid=abc123; csrftoken=xyz789')塞进 headers={'Cookie': '...'},别试图自己拼 requests.Session().cookies.set()
  • Referer 必须和当前请求路径逻辑一致,比如从 /list 页面点进 /detail/123,那请求 detail 时 Referer 就得是 /list,否则某些风控直接拦截
  • 敏感操作(如提交表单)要带上 X-CSRFToken 或 csrftoken cookie 值,这个通常藏在 HTML 的 里,得先 get 一次页面提取
  • 用 Session 对象自动管理 Cookie,但注意:跨域名不共享,且 session.get() 不会自动处理 302 带来的 Set-Cookie(除非显式设 allow_redirects=True)

真正难的从来不是发个请求,而是看懂网站怎么防你——它在哪埋检测点、哪些 header 是硬性门槛、哪些字段会随时间/用户动态变化。这些细节不翻 Network 面板、不对比前后请求,光查文档没用。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python 爬虫

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1891

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

5224

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1829

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

31657

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3747

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3767

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1263

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2903

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程