Python实战项目04:简易网页爬虫,requests库实战

发布时间:2026/9/29 3:29:12

Python实战项目04:简易网页爬虫,requests库实战 实战系列Python零基础综合实战项目第4/5套 项目定位第三方开源库综合实战掌握网络请求基础。学习使用 requests 发送HTTP请求获取网页源代码解析提取文本保存网页到本地。理解爬虫基础礼仪、请求头、状态码为后续数据分析打下基础。✅ 项目难度⭐⭐⭐✅ 前置知识变量、字符串、循环、条件、函数、异常处理、pip包管理✅ 学到的核心能力使用pip安装第三方 requests 库发送GET网络请求看懂响应状态码配置请求头User‑Agent模拟浏览器访问获取网页源码文本保存网页到本地文件超时、网络异常捕获处理程序健壮性爬虫基础规范与反爬基础避坑要点一、项目需求说明实现控制台简易网页爬虫工具完成以下功能输入目标网页URL地址发送GET请求模拟浏览器访问防止被服务器拦截打印响应状态码判断访问成功还是失败获取网页HTML源码打印源码片段预览将完整网页源码保存为本地 html 文件捕获网络超时、断网、非法URL等异常程序不闪退输出请求耗时直观查看网页访问速度二、requests库基础API预习requests.get()发送GET网络请求获取网页资源response.status_codeHTTP响应状态码200代表访问成功response.text网页HTML源码字符串response.headers服务器返回响应头信息response.elapsed请求耗时状态码常识200成功404页面不存在403拒绝访问500服务器内部错误。三、安装requests第三方库打开终端 / PyCharm终端执行pip安装命令pip install requests国内下载慢可以使用镜像源加速pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple四、完整可运行源码详细注释# # 实战项目04简易网页爬虫 requests库实战 # 功能发送网络请求、获取网页源码、保存网页到本地 # import requests def get_html_page(url, timeout10): 请求网页返回网页源码 :param url: 目标网页地址 :param timeout: 请求超时时间单位秒 :return: 成功返回html文本失败返回None # 请求头模拟浏览器很多网站会拦截无UA的程序访问 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 } try: resp requests.get(url, headersheaders, timeouttimeout) resp.raise_for_status() # 状态码不是200直接抛出异常 print(f✅ 请求成功状态码{resp.status_code}) print(f⏱️ 请求耗时{resp.elapsed.total_seconds():.2f} 秒) return resp.text except requests.exceptions.Timeout: print(❌ 请求超时网页响应过慢请检查网络或者更换URL) except requests.exceptions.ConnectionError: print(❌ 网络连接错误无法访问该地址请检查网络与网址) except requests.exceptions.HTTPError as e: print(f❌ HTTP访问异常{e}) except Exception as e: print(f❌ 未知异常{str(e)}) return None def save_html(content, save_filenameoutput.html): 将网页源码保存到本地html文件 :param content: html网页字符串 :param save_filename: 保存文件名 if content is None: print(⚠️ 网页内容为空跳过保存) return try: with open(save_filename, w, encodingutf‑8) as f: f.write(content) print(f✅ 文件保存成功输出文件{save_filename}) except Exception as e: print(f❌ 文件写入失败{e}) def main(): print( 简易网页爬虫工具 ) target_url input(请输入要抓取的网页URL).strip() if not target_url.startswith(http): print(❌ URL必须以 http:// 或者 https:// 开头) return html_text get_html_page(target_url) if html_text is not None: # 打印前300字符预览网页源码 print(\n----------网页源码片段预览----------) print(html_text[:300]) print(------------------------------------\n) save_html(html_text, save_filenamedownload_page.html) if __name__ __main__: main()五、项目运行说明输入完整网址必须带 https://例如https://www.baidu.com设置User‑Agent模拟浏览器降低被网站拦截概率设置timeout超时防止程序无限卡住等待网页响应访问成功后会输出状态码、请求耗时打印部分源码预览完整网页源码自动保存为 download_page.html双击即可浏览器打开网络异常、超时、404都会捕获异常程序不会直接崩溃退出⚠️爬虫重要注意事项不要高频、疯狂请求同一个网站避免给对方服务器造成压力遵守网站robots协议禁止爬取受版权保护、隐私数据本项目仅用于学习不要用于商业、恶意采集业务六、核心知识点复盘第三方库安装pip安装开源库镜像源加速下载HTTP GET请求状态码含义请求头User‑Agent作用requests各类网络异常捕获超时、连接错误、HTTP错误网页文本获取 文件持久化保存爬虫基础伦理反爬基础认知七、课后拓展作业1. 使用time.sleep()增加请求延时每次请求暂停1‑2秒模拟人类浏览速度。2. 引入bs4(BeautifulSoup4)库从网页中提取所有超链接a标签打印链接文本与地址。3. 增加批量抓取读取url列表循环依次抓取多个网页分别保存为不同html文件。4. 判断网页编码解决部分网页中文乱码问题。七、课后拓展作业 完整参考答案所有答案基于本项目源码拓展兼容原版代码可直接复制运行无需大幅修改。作业1添加请求延时模拟人工浏览核心思路导入time模块请求前休眠1-2秒降低网站反爬拦截概率。import requests import time def get_html_page(url, timeout10): 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 } # 模拟人工浏览延时2秒发送请求 time.sleep(2) try: resp requests.get(url, headersheaders, timeouttimeout) resp.raise_for_status() print(f✅ 请求成功状态码{resp.status_code}) print(f⏱️ 请求耗时{resp.elapsed.total_seconds():.2f} 秒) return resp.text except requests.exceptions.Timeout: print(❌ 请求超时网页响应过慢请检查网络或者更换URL) except requests.exceptions.ConnectionError: print(❌ 网络连接错误无法访问该地址请检查网络与网址) except requests.exceptions.HTTPError as e: print(f❌ HTTP访问异常{e}) except Exception as e: print(f❌ 未知异常{str(e)}) return None作业2bs4解析网页提取全部超链接第一步安装解析库pip install beautifulsoup4第二步完整拓展代码提取页面所有a标签链接和文本import requests from bs4 import BeautifulSoup def get_all_link(html_text): 解析网页提取所有超链接 soup BeautifulSoup(html_text, html.parser) # 匹配所有a标签 a_list soup.find_all(a) print(f\n✅ 共找到{a_list.__len__()}个超链接) for a in a_list: # 获取链接文本和链接地址 text a.get_text(stripTrue) href a.get(href) if href: print(f文本{text} | 链接{href}) # 在原有main函数中调用 def main(): print( 超链接抓取工具 ) target_url input(请输入要抓取的网页URL).strip() if not target_url.startswith(http): print(❌ URL必须以 http:// 或者 https:// 开头) return html_text get_html_page(target_url) if html_text: get_all_link(html_text)作业3批量抓取多个网页分别保存文件实现批量URL循环抓取自动命名文件不重复def batch_crawl(url_list): 批量抓取多个网页 for index, url in enumerate(url_list, start1): print(f\n---------- 正在抓取第{index}个网页{url} ----------) html get_html_page(url) if html: # 按序号命名文件避免覆盖 save_html(html, save_filenamefbatch_page_{index}.html) # 批量URL列表可自行添加 def main(): url_list [ https://www.baidu.com, https://www.csdn.net ] batch_crawl(url_list)作业4自动适配网页编码解决中文乱码很多网页默认编码非utf-8导致中文乱码通过resp.apparent_encoding自动识别编码def get_html_page(url, timeout10): 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 } try: resp requests.get(url, headersheaders, timeouttimeout) resp.raise_for_status() # 自动识别网页真实编码解决乱码 resp.encoding resp.apparent_encoding print(f✅ 请求成功状态码{resp.status_code}) print(f✅ 网页编码{resp.encoding}) return resp.text except Exception as e: print(f❌ 请求异常{str(e)}) return None拓展作业核心总结延时请求time.sleep()是基础反爬小技巧适配绝大多数静态网页数据解析bs4 是Python最常用网页解析库为后续精准爬虫铺垫批量爬取循环遍历URL列表实现自动化批量数据采集编码处理resp.apparent_encoding彻底解决网页中文乱码问题八、下期预告下一个实战项目项目05JSON数据解析与数据可视化小案例完成整套零基础实战项目闭环。点赞 收藏 关注跟随专栏完成全套Python零基础学习
延伸阅读

更多相关文章

2026/9/29 3:29:12

【数据结构】图与树 · 算法手记与练习

#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <math.h>#define MAXN 1010int iMaxLength 0;//最长路径长度 int iCurrentLength 0;//当前路径长度 typedef int ElemType; ElemType stMax_Path[MAXN];//最长路径元素 ElemT…

2026/9/29 3:24:12

DeepSeek模型微调蒸馏稀疏化全流程实操指南:从预训练到落地

简介&#xff1a;这是一份191页的DeepSeek模型训练微调蒸馏全流程实操指南&#xff0c;面向大模型算法工程师、训练调优与部署落地人员&#xff0c;系统对比自监督预训练、Prompt-Dropout微调与蒸馏模型稀疏化等核心技术路径&#xff0c;完整覆盖预训练数据构建、对比损失实现、…

2026/9/29 4:34:15

Claude Code之后:你应该了解的6个开源工具与TaoToken配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 4:29:15

智能汽车车载测试人才缺口大,实战型工程师如何快速入行?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/28 3:03:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/28 6:05:15

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集&#xff1a;Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/28 6:07:41

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 0:04:04

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人&#xff0c;迟早会撞上同一堵墙&#xff1a;模型输出飘忽不定&#xff0c;今天答得好好的&#xff0c;明天换个问法就胡说八道。你改了一版提示词&#xff0c;感觉好像好了点&#xff0c;但到底好了多少&#xff1f;说不清。…

2026/9/29 0:04:04

Java采购管理系统实战:从数据库设计到事务一致性

简介&#xff1a;这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码&#xff0c;采用JSP技术搭建&#xff0c;配合MySQL数据库&#xff0c;用于解决企业采购信息的管理问题&#xff0c;适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/28 1:59:25

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑