☰
01_requests网页请求入门
2026/9/29 6:14:32 网站建设 项目流程

很多人听到"爬虫"两个字就觉得很复杂,要学好多东西。其实入门级的数据采集特别简单——你只需要几行代码,就能把一个网页的内容拿下来。

这是「Python 数据实战」系列的第一篇。我们从最基础的requests库开始,一步一步带你从零基础到能自己抓数据、洗数据、分析数据、做图表。

今天这篇是最简单的:发一个请求,拿到一个网页。


一、requests 是什么?

你可以把requests理解成 Python 版的浏览器。

你平时打开浏览器,输入一个网址,回车,然后网页就出来了。这个过程背后其实就是浏览器向服务器发了一个"请求",服务器把网页内容"响应"回来,浏览器把它渲染成你看到的样子。

requests干的就是同样的事——只不过它不渲染页面,而是把网页的原始代码(HTML)直接拿给你。

为什么用requests不用别的?因为它是 Python 里最简单、最流行、文档最全的 HTTP 请求库。没有之一。


二、安装:一行命令搞定

打开你的终端(Windows 是命令提示符或 PowerShell,Mac 是终端),输入:

pipinstallrequests

等它跑完就行了。如果你的环境里pip不行,试试pip3:

pip3installrequests

装完之后,可以验证一下装没装上:

pip show requests

能看到版本号就说明装好了。写这篇的时候最新版本是 2.32.x,你看到的可能比这个新,没关系,用法是一样的。


三、第一个请求:3行代码拿到网页

直接上代码,别害怕,就3行:

importrequests response=requests.get('https://www.example.com')print(response.text)

就这么多。我们一行一行说。

第一行:import requests—— 把刚才装的库引进来。就像打开工具箱盖子。

第二行:response = requests.get('https://www.example.com')—— 向 example.com 这个网址发了一个 GET 请求,把服务器返回的结果存在response这个变量里。

第三行:print(response.text)—— 打印响应的文本内容,也就是网页的 HTML 源码。

你把这段代码存成demo.py,然后运行:

python demo.py

运行之后,你会看到一大段 HTML 代码打印出来。那就是 example.com 这个网页的全部内容。

恭喜你,你已经完成了人生第一个数据采集程序。🍃


四、响应状态码:网页到底拿到了没有?

光拿到response还不够,你得知道请求到底成功了没有。

怎么判断?看状态码。

importrequests response=requests.get('https://www.example.com')print(response.status_code)# 输出 200

status_code就是状态码。常见的几个你得认识:

状态码含义通俗解释
200OK成功拿到了,一切正常
301/302重定向网页搬家了,让你去新地址
404Not Found页面不存在
403Forbidden服务器拒绝了你,不让看
500Internal Server Error服务器自己崩了

做数据采集时,最理想的就是 200。如果拿到的是 403,说明对方网站检测到你是爬虫,把你拒了。这种情况后面我们会讲怎么应对。

写代码的时候,最好判断一下状态码,别瞎往下跑:

importrequests response=requests.get('https://www.example.com')ifresponse.status_code==200:print('请求成功!')print(response.text[:500])# 只打印前500个字符,免得刷屏else:print(f'请求失败,状态码:{response.status_code}')

五、response 对象里还有什么?

response不只有text和status_code,它里面东西挺多的。常用的几个:

importrequests response=requests.get('https://www.example.com')print(response.status_code)# 状态码print(response.text)# 响应文本(字符串形式)print(response.content)# 响应内容(字节形式,图片/文件用这个)print(response.headers)# 响应头信息print(response.encoding)# 编码方式print(response.url)# 实际请求的 URL(重定向后可能不一样)

有一个新手容易踩的坑:中文乱码。

有些网页的编码检测不准,response.text拿到的中文是乱码。这时候你可以手动指定编码:

response.encoding='utf-8'print(response.text)

或者更智能一点,从内容里自动推断:

response.encoding=response.apparent_encoding

这个小技巧在抓中文网站的时候特别好用。


六、加个请求头,装得像个浏览器

你直接用requests.get()发请求,对方网站一看就知道你是爬虫——因为你的请求头里明明白白写着python-requests/2.xx。

大部分网站无所谓,但有些比较敏感的网站会直接给你返回 403。

怎么解决?加上User-Agent请求头,伪装成浏览器:

importrequests 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'}response=requests.get('https://www.example.com',headers=headers)print(response.status_code)

加上之后,从请求头看,你和一个正常的 Chrome 浏览器没区别。

这个User-Agent去哪里找?最简单的办法——打开你的浏览器,百度搜"我的User-Agent",第一个结果就是你自己的,直接复制粘贴用。


七、GET 请求带参数

有时候你需要在 URL 后面加参数,比如搜索的时候:

https://www.example.com/search?q=python&page=1

手动拼 URL 也行,但更优雅的写法是用params参数:

importrequests params={'q':'python','page':1}response=requests.get('https://www.example.com/search',params=params)print(response.url)# https://www.example.com/search?q=python&page=1

requests会自动帮你把参数拼好、编码好,不用你自己操心特殊字符转义的问题。


八、今天的重点回顾

这一篇内容不多,但都是基础中的基础。记住这几个关键点:

  1. requests.get(url)发 GET 请求,返回一个response对象
  2. response.status_code == 200才是成功,其他状态码都要处理
  3. response.text拿网页文本,乱码就手动指定encoding
  4. 加User-Agent请求头,伪装成浏览器,不容易被封
  5. 参数用params传,别自己拼 URL

掌握了这些,你已经能拿到任何公开静态网页的源码了。但拿到源码只是第一步——你拿到的是一大坨 HTML,怎么从里面提取出你想要的具体数据呢?

下一篇我们讲BeautifulSoup:怎么从网页里精准提取标题、内容、表格等信息。


本文仅讲解核心思路与关键代码片段,适合零基础学习原理。

完整可运行工程源码、配套测试数据、详细逐行注释、常见报错排错文档已打包成资源。

【资源说明】

  1. 所有资源仅限个人学习使用,禁止商用、二次倒卖、公开分发
  2. 包含完整源码 + 测试数据 + 使用文档
  3. 不含一对一远程调试、环境配置答疑服务
  4. 适合直接复用、写作业、练项目、做个人作品集

【合规声明】
本项目仅用于公开静态网页、公开学习数据采集练习,禁止用于商业爬取、高频爬取、隐私数据爬取,使用者自行承担使用责任。

©️ 梅雅达编程笔记原创 · 首发 CSDN · 转载请注明出处

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询