新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/29 3:29:09来源:尧图网络
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零基础学习
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

风格化渲染系统搭建:LUT调色与NPR光照实战指南 2026/9/29 4:22:09

风格化渲染系统搭建:LUT调色与NPR光照实战指南

风格化渲染这件事,我最早是从一个很朴素的需求开始的:手上有个场景,PBR 材质跑出来的效果太"标准"了,金属就是金属、布料就是布料,画面干净但没性格。客户要的是那种一眼能认出来的视觉调性——可能是偏手绘…

阅读更多 →
彻底搞懂CSS文本溢出:单行与多行省略号原理与实战 2026/9/29 4:22:02

彻底搞懂CSS文本溢出:单行与多行省略号原理与实战

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

阅读更多 →
RAG演进路线与核心架构 2026/9/29 4:21:56

RAG演进路线与核心架构

1,Naive RAG(朴素RAG)Naive RAG属于RAG系统的最基本框架,框架只有单一的向量检索,直接把检索出来的相关文档喂给大模型增强生成局限性:检索依赖文本词汇匹配,无法感知语义关联,并且无…

阅读更多 →
Linux下不通过文件名删除文件 2026/9/29 4:21:56

Linux下不通过文件名删除文件

在 Linux 下,可以不依赖文件名删除文件,常见有以下几种方法,具体取决于手上有什么信息。方法一:根据 inode 删除(最常用)如果文件名乱码、包含特殊字符、或者无法输入文件名,可以根据 inode 删除…

阅读更多 →
肺结节检测数据集 | 1200张YOLO医学影像数据集 2026/9/29 4:21:56

肺结节检测数据集 | 1200张YOLO医学影像数据集

肺结节检测数据集 | 1200张YOLO医学影像数据集 适用于肺癌早期筛查、影像辅助阅片与目标检测研究 一、数据集概述 本数据集基于LUNA16(LUng Nodule Analysis 2016)权威公开数据集整理为YOLO目标检测格式,共包含约1200张高质量标注图像&…

阅读更多 →
K8S滚动升级,SpringBoot优雅停机 2026/9/29 4:21:56

K8S滚动升级,SpringBoot优雅停机

需求:在K8S服务滚动升级时,Springboot服务可能不可用,或者服务数据未处理完形成脏数据。如何处理:1、K8s配置新服务启动完成后,再关闭旧服务。2、Tomcat启用优雅停机配置,停机不再接收新的请求,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉