2026 requests零基础入门:从0到1搞定HTTP请求与数据采集

张开发
2026/4/19 6:14:39 15 分钟阅读

分享文章

2026 requests零基础入门:从0到1搞定HTTP请求与数据采集
很多刚接触Python数据采集的朋友第一个遇到的问题就是怎么用代码访问一个网页浏览器能正常打开为什么代码返回403今天就带大家从零开始学习Python生态最流行的HTTP库——requests。它语法简洁、功能强大几乎能满足所有日常的HTTP请求需求是爬虫、API调用、自动化测试的必备工具。本文从最基础的安装开始一步步讲解核心用法和实战技巧看完就能写出自己的第一个数据采集程序。一、为什么选择requestsPython标准库自带了urllib但它的用法非常繁琐需要处理很多底层细节。而requests库在urllib的基础上做了高度封装把复杂的HTTP操作变成了简单的函数调用。对比一下urllib发送GET请求importurllib.request responseurllib.request.urlopen(https://www.baidu.com)htmlresponse.read().decode(utf-8)requests发送GET请求importrequests responserequests.get(https://www.baidu.com)htmlresponse.text可以看到requests的代码更简洁、更易读。除此之外它还原生支持HTTPS、Cookie、会话保持、文件上传下载等功能几乎不需要额外安装其他依赖。二、环境搭建与快速上手2.1 安装requestsrequests是第三方库需要用pip安装pipinstallrequests验证安装是否成功importrequestsprint(requests.__version__)# 输出当前版本如2.32.32.2 第一个请求我们用requests发送第一个GET请求访问百度首页importrequests# 发送GET请求responserequests.get(https://www.baidu.com)# 打印响应状态码print(f状态码{response.status_code})# 打印响应内容的前100个字符print(f响应内容{response.text[:100]})运行代码如果输出状态码200说明请求成功。这就是最简单的HTTP请求整个过程只需要一行代码。三、requests核心用法详解3.1 GET请求获取数据GET是最常用的HTTP方法用于从服务器获取数据。1带参数的GET请求很多URL后面会跟查询参数比如https://www.example.com/search?qpythonpage1。不用手动拼接字符串requests提供了params参数直接传字典即可importrequests params{q:python,page:1,size:10}responserequests.get(https://www.example.com/search,paramsparams)print(response.url)# 输出https://www.example.com/search?qpythonpage1size102添加请求头很多网站会检查请求头中的User-Agent如果发现是爬虫会直接返回403。我们需要模拟浏览器的请求头headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36}responserequests.get(https://www.example.com,headersheaders)3.2 响应对象处理返回结果requests的所有请求都会返回一个Response对象包含了服务器返回的所有信息。常用属性如下属性说明response.text字符串形式的响应内容自动识别编码response.content字节流形式的响应内容用于下载文件response.json()解析JSON格式的响应返回字典response.status_codeHTTP状态码200表示成功response.headers响应头返回字典response.cookies响应Cookie返回RequestsCookieJar对象response.url最终请求的URL处理重定向后注意如果response.text出现乱码可以手动指定编码response.encodingutf-8print(response.text)3.3 POST请求提交数据POST请求用于向服务器提交数据比如登录、提交表单等。1提交表单数据用data参数提交表单数据会自动编码为application/x-www-form-urlencoded格式data{username:admin,password:123456}responserequests.post(https://www.example.com/login,datadata)2提交JSON数据现在大多数API都接受JSON格式的数据用json参数即可会自动设置Content-Type: application/jsonjson_data{title:测试文章,content:这是一篇测试文章}responserequests.post(https://www.example.com/api/articles,jsonjson_data)3.4 完整请求流程图创建请求参数URL/headers/params/data调用requests.get/postrequests封装HTTP请求发送请求到服务器服务器处理请求并返回响应requests解析响应为Response对象处理响应内容text/content/json四、进阶用法满足复杂需求4.1 会话保持Session对象如果需要多次请求同一个网站并且保持登录状态可以使用Session对象。它会自动保存Cookie不用每次请求都手动传递importrequests# 创建会话对象sessionrequests.Session()# 登录请求Session会自动保存Cookielogin_data{username:admin,password:123456}session.post(https://www.example.com/login,datalogin_data)# 后续请求会自动带上登录Cookieresponsesession.get(https://www.example.com/user/profile)print(response.text)4.2 文件上传与下载1文件上传用files参数上传文件files{file:open(test.txt,rb)}responserequests.post(https://www.example.com/upload,filesfiles)2文件下载用response.content获取字节流然后写入文件# 下载图片responserequests.get(https://www.example.com/image.jpg)withopen(image.jpg,wb)asf:f.write(response.content)# 大文件分块下载避免内存溢出responserequests.get(https://www.example.com/large_file.zip,streamTrue)withopen(large_file.zip,wb)asf:forchunkinresponse.iter_content(chunk_size1024):ifchunk:f.write(chunk)4.3 异常处理网络请求随时可能出错必须添加异常处理避免程序崩溃importrequestsfromrequests.exceptionsimportConnectionError,Timeout,HTTPError,RequestExceptiontry:responserequests.get(https://www.example.com,timeout10)response.raise_for_status()# 状态码不是200时抛出HTTPErrorexceptConnectionError:print(网络连接错误)exceptTimeout:print(请求超时)exceptHTTPErrorase:print(fHTTP错误{e})exceptRequestExceptionase:print(f请求异常{e})else:print(请求成功)五、实战爬取静态新闻列表现在我们用requests写一个完整的爬虫爬取一个静态新闻网站的新闻列表importrequestsfrombs4importBeautifulSoupdefcrawl_news():urlhttps://news.example.comheaders{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36}try:responserequests.get(url,headersheaders,timeout10)response.raise_for_status()response.encodingutf-8# 用BeautifulSoup解析HTMLsoupBeautifulSoup(response.text,html.parser)news_listsoup.find_all(div,class_news-item)fornewsinnews_list:titlenews.find(h3).text.strip()linknews.find(a)[href]publish_timenews.find(span,class_time).text.strip()print(f标题{title})print(f链接{link})print(f发布时间{publish_time})print(-*50)exceptExceptionase:print(f爬取失败{e})if__name____main__:crawl_news()六、新手常见踩坑总结缺少User-Agent被反爬这是最常见的问题几乎所有网站都会检查User-Agent一定要添加模拟浏览器的请求头。编码乱码问题如果response.text出现乱码手动指定response.encoding utf-8或者response.encoding response.apparent_encoding。SSL验证错误访问自签名证书的网站时会出现SSL错误可以添加verifyFalse参数requests.get(url, verifyFalse)。请求超时一定要设置timeout参数否则程序可能会一直卡住。重定向问题requests默认会自动处理重定向如果不需要可以设置allow_redirectsFalse。七、订阅与专栏以上就是requests库的核心用法掌握这些内容就能应对绝大多数日常的HTTP请求和简单的数据采集场景。更多高级用法如代理设置、异步请求、会话池管理和完整的爬虫项目实战欢迎订阅我的专栏《最新爬虫实战项目》和《2026爬虫攻防实战指南》我会持续更新更多工业级数据采集的技巧和经验。合规声明本文仅用于技术交流学习请勿用于任何商业用途。请严格遵守《中华人民共和国网络安全法》《数据安全法》和《个人信息保护法》尊重平台的知识产权和用户隐私。所有数据采集行为都应当在平台官方允许的范围内进行任何非法使用造成的后果与作者无关。

更多文章