武功县住房与城乡建设局网站手机网站集成支付宝

张小明 2026/1/2 6:22:03
武功县住房与城乡建设局网站,手机网站集成支付宝,易观数据,动画设计和动漫设计前言 静态网页是指内容固定、由服务器直接返回 HTML 源码的网页#xff0c;其数据直接嵌入在源码中#xff0c;无需动态加载#xff0c;是爬虫入门的最佳实践场景。掌握静态网页的爬取流程#xff0c;能帮助开发者建立完整的爬虫开发思维#xff0c;为后续处理动态网页、…前言静态网页是指内容固定、由服务器直接返回 HTML 源码的网页其数据直接嵌入在源码中无需动态加载是爬虫入门的最佳实践场景。掌握静态网页的爬取流程能帮助开发者建立完整的爬虫开发思维为后续处理动态网页、反爬网页奠定基础。本文将以 **豆瓣读书 Top250** 为实战目标从需求分析、请求发送、数据提取到数据清洗、结果输出完整演示静态网页爬取的全流程拆解每个环节的核心技巧与注意事项。摘要本文聚焦静态网页爬取的全流程实战以豆瓣读书 Top250 为爬取目标系统讲解 “需求分析→请求构造→响应解析→数据提取→数据清洗→结果输出” 六大核心环节结合 urllib 库、正则表达式、BeautifulSoup 等工具实现静态网页数据的完整爬取。文中包含全流程代码示例、数据提取对比表格、输出结果解析旨在帮助读者掌握静态网页爬取的标准化流程理解各环节的核心逻辑与实操技巧。一、静态网页爬取核心流程梳理静态网页爬取的核心逻辑遵循 “请求 - 解析 - 提取 - 输出” 的标准化流程各环节职责明确流程环节核心目标常用工具 / 技术关键注意事项需求分析明确爬取目标、数据字段、输出格式人工分析网页结构确认数据是否在 HTML 源码中静态特征请求构造发送合法请求获取完整 HTML 源码urllib/requests、请求头构造模拟浏览器请求避免被反爬拦截响应解析将字节流响应转为可解析的字符串字符编码处理utf-8/gbk匹配网页实际编码避免乱码数据提取从 HTML 源码中提取目标数据正则表达式、BeautifulSoup、XPath精准匹配数据所在的标签 / 属性数据清洗去除冗余数据、格式化字段字符串处理、数据类型转换统一数据格式提升数据可用性结果输出将清洗后的数据保存 / 展示控制台输出、TXT/CSV/Excel 保存按需求选择输出格式便于后续使用1.1 静态网页特征识别判断目标网页是否为静态网页的核心方法打开目标网页按F12进入开发者工具切换至Elements标签直接搜索关键数据如书名、评分若能在 HTML 源码中找到即为静态网页切换至Network标签刷新页面后仅需加载 HTML 文件即可显示完整内容无额外的 XHR/JSON 请求禁用 JavaScript 后开发者工具Settings→Debugger→Disable JavaScript页面内容仍完整显示。二、实战目标分析豆瓣读书 Top2502.1 爬取需求目标网站豆瓣读书 Top250爬取字段排名、书名、作者、出版社、出版时间、评分、简介输出格式控制台结构化输出 文本文件保存爬取范围豆瓣读书 Top250 第一页数据演示核心流程2.2 网页结构分析通过浏览器开发者工具分析豆瓣读书 Top250 页面结构每本图书的信息包裹在classitem的 li 标签中排名classpic下的 em 标签书名classpl2下的 a 标签title 属性作者 / 出版社 / 出版时间classpl的 span 标签评分classrating_nums的 span 标签简介classinq的 span 标签部分图书无简介。三、全流程代码实现与解析3.1 环境准备需安装 BeautifulSoup用于 HTML 解析bash运行pip install beautifulsoup43.2 完整爬取代码python运行import urllib.request import urllib.error from bs4 import BeautifulSoup import re # 1. 配置基础参数 # 目标URL url https://book.douban.com/top250 # 请求头模拟Chrome浏览器 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, Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9,en;q0.8, Referer: https://book.douban.com/ } # 2. 发送请求获取响应 def get_html(url, headers): 发送HTTP请求获取网页HTML源码 :param url: 目标URL :param headers: 请求头 :return: 解码后的HTML字符串失败返回None try: # 构造请求对象 request urllib.request.Request(urlurl, headersheaders, methodGET) # 发送请求 response urllib.request.urlopen(request, timeout15) # 读取响应字节流解码为字符串豆瓣读书编码为utf-8 html response.read().decode(utf-8) print(f请求成功响应状态码{response.getcode()}) return html except urllib.error.HTTPError as e: print(fHTTP错误状态码 {e.code}原因 {e.reason}) return None except urllib.error.URLError as e: print(f网络错误{e.reason}) return None except Exception as e: print(f未知错误{e}) return None # 3. 解析HTML提取数据 def extract_data(html): 解析HTML源码提取目标数据 :param html: 网页HTML字符串 :return: 提取后的字典列表 if not html: return [] # 初始化BeautifulSoup对象使用lxml解析器需提前安装pip install lxml soup BeautifulSoup(html, lxml) # 定位所有图书项 book_items soup.find_all(li, class_item) # 存储提取的数据 book_list [] # 遍历每个图书项提取字段 for item in book_items: book_info {} try: # 1. 排名 book_info[排名] item.find(em).text.strip() # 2. 书名优先取title属性无则取文本 title_tag item.find(span, class_title) book_info[书名] title_tag.get(title, title_tag.text.strip()) # 3. 作者/出版社/出版时间统一提取后拆分 pl_tag item.find(p, class_pl) pl_text pl_tag.text.strip() # 拆分规则作者 / 出版社 / 出版时间 / 定价部分有定价需兼容 pl_parts pl_text.split(/) book_info[作者] pl_parts[0].strip() if len(pl_parts) 0 else book_info[出版社] pl_parts[-3].strip() if len(pl_parts) 3 else book_info[出版时间] pl_parts[-2].strip() if len(pl_parts) 2 else # 4. 评分 score_tag item.find(span, class_rating_nums) book_info[评分] score_tag.text.strip() if score_tag else 无评分 # 5. 简介 inq_tag item.find(span, class_inq) book_info[简介] inq_tag.text.strip() if inq_tag else 无简介 book_list.append(book_info) except Exception as e: print(f提取单条图书数据失败{e}) continue print(f共提取到 {len(book_list)} 条图书数据) return book_list # 4. 数据清洗 def clean_data(book_list): 清洗数据统一格式去除冗余 :param book_list: 提取后的字典列表 :return: 清洗后的字典列表 cleaned_list [] for book in book_list: cleaned_book {} # 排名转为整数 cleaned_book[排名] int(book[排名]) if book[排名].isdigit() else 0 # 书名去除特殊字符 cleaned_book[书名] re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9\s], , book[书名]) # 作者/出版社/出版时间去除首尾空格 cleaned_book[作者] book[作者].strip() cleaned_book[出版社] book[出版社].strip() cleaned_book[出版时间] book[出版时间].strip() # 评分转为浮点数 cleaned_book[评分] float(book[评分]) if book[评分].replace(., ).isdigit() else 0.0 # 简介去除换行符 cleaned_book[简介] book[简介].replace(\n, ).strip() cleaned_list.append(cleaned_book) return cleaned_list # 5. 结果输出 def output_result(book_list): 输出结果控制台结构化输出 保存为TXT文件 :param book_list: 清洗后的字典列表 if not book_list: print(无数据可输出) return # 1. 控制台输出 print(\n 豆瓣读书Top250第一页 ) for book in book_list: print(f排名{book[排名]} | 书名{book[书名]}) print(f作者{book[作者]} | 出版社{book[出版社]} | 出版时间{book[出版时间]}) print(f评分{book[评分]} | 简介{book[简介]}) print(- * 80) # 2. 保存为TXT文件 with open(豆瓣读书Top250_第一页.txt, w, encodingutf-8) as f: f.write(豆瓣读书Top250第一页\n) f.write( * 80 \n) for book in book_list: f.write(f排名{book[排名]}\n) f.write(f书名{book[书名]}\n) f.write(f作者{book[作者]}\n) f.write(f出版社{book[出版社]}\n) f.write(f出版时间{book[出版时间]}\n) f.write(f评分{book[评分]}\n) f.write(f简介{book[简介]}\n) f.write(- * 80 \n) print(\n数据已保存至豆瓣读书Top250_第一页.txt) # 主函数整合全流程 if __name__ __main__: # 1. 发送请求获取HTML html get_html(url, headers) # 2. 提取数据 raw_data extract_data(html) # 3. 数据清洗 cleaned_data clean_data(raw_data) # 4. 结果输出 output_result(cleaned_data)3.3 输出结果展示控制台输出节选plaintext请求成功响应状态码200 共提取到 25 条图书数据 豆瓣读书Top250第一页 排名1 | 书名红楼梦 作者曹雪芹 高鹗 | 出版社人民文学出版社 | 出版时间1996年2月 评分9.6 | 简介满纸荒唐言一把辛酸泪。都云作者痴谁解其中味 -------------------------------------------------------------------------------- 排名2 | 书名活着 作者余华 | 出版社作家出版社 | 出版时间2012年8月 评分9.3 | 简介人是为活着本身而活着的而不是为活着之外的任何事物所活着。 -------------------------------------------------------------------------------- 排名3 | 书名百年孤独 作者加西亚·马尔克斯 范晔 译 | 出版社南海出版公司 | 出版时间2011年6月 评分9.3 | 简介生命中真正重要的不是你遭遇了什么而是你记住了哪些事又是如何铭记的。 -------------------------------------------------------------------------------- ... 数据已保存至豆瓣读书Top250_第一页.txtTXT 文件输出节选plaintext豆瓣读书Top250第一页 排名1 书名红楼梦 作者曹雪芹 高鹗 出版社人民文学出版社 出版时间1996年2月 评分9.6 简介满纸荒唐言一把辛酸泪。都云作者痴谁解其中味 -------------------------------------------------------------------------------- 排名2 书名活着 作者余华 出版社作家出版社 出版时间2012年8月 评分9.3 简介人是为活着本身而活着的而不是为活着之外的任何事物所活着。 --------------------------------------------------------------------------------四、核心环节深度解析4.1 请求构造模拟浏览器避免反爬配置完整的请求头User-Agent、Referer、Accept模拟 Chrome 浏览器请求避开豆瓣的基础反爬机制设置超时时间timeout15避免请求长时间阻塞异常捕获覆盖 HTTP 错误、网络错误、未知错误确保程序稳定性。4.2 数据提取BeautifulSoup vs 正则表达式静态网页数据提取有两种核心方式各有优劣提取方式实现示例优势劣势BeautifulSoup标签定位item.find(span, class_rating_nums).text代码可读性高适配 HTML 结构变化无需写复杂正则解析速度略慢依赖标签 /class 属性正则表达式文本匹配re.findall(rspan classrating_nums(.*?)/span, html)解析速度快可匹配无固定标签的数据代码可读性差HTML 结构变化易失效实战建议静态网页优先使用 BeautifulSoup仅当标签结构极不稳定时使用正则表达式。4.3 数据清洗提升数据可用性类型转换将排名字符串转为整数评分字符串转为浮点数便于后续排序 / 计算字符过滤使用正则表达式去除书名中的特殊字符避免乱码 / 冗余空值兼容对无简介、无评分的字段设置默认值避免程序报错空格清理去除字段首尾空格统一数据格式。4.4 结果输出多格式适配需求控制台输出结构化展示数据便于调试和快速查看TXT 文件保存持久化存储数据便于后续查看和使用拓展方向可通过csv库保存为 CSV 文件或通过openpyxl保存为 Excel 文件适配数据分析场景。五、常见问题与解决方案问题现象原因分析解决方案提取数据为空1. HTML 解析器错误如未安装 lxml2. 标签 /class 属性拼写错误1. 安装 lxml 解析器pip install lxml2. 核对浏览器中标签的 class 属性注意空格 / 大小写数据乱码响应解码编码与网页实际编码不一致1. 查看网页Content-Type响应头确认编码2. 尝试gbk/gb2312等编码如中文网页部分数据提取失败个别图书的 HTML 结构不一致如无简介在提取时增加异常捕获为缺失字段设置默认值保存文件时编码错误未指定文件编码为 utf-8打开文件时指定encodingutf-8六、拓展优化爬取多页数据静态网页爬取的进阶需求是多页数据爬取以豆瓣读书 Top250 为例其分页 URL 规律为第一页https://book.douban.com/top250第二页https://book.douban.com/top250?start25第三页https://book.douban.com/top250?start50分页规则start参数为页码 - 1*25多页爬取核心代码整合到主函数python运行# 多页爬取爬取前3页 if __name__ __main__: all_book_data [] # 遍历前3页 for page in range(3): start page * 25 # 构造分页URL page_url fhttps://book.douban.com/top250?start{start} if start 0 else https://book.douban.com/top250 print(f\n 爬取第 {page1} 页{page_url} ) # 1. 获取HTML html get_html(page_url, headers) # 2. 提取数据 raw_data extract_data(html) # 3. 数据清洗 cleaned_data clean_data(raw_data) # 4. 合并数据 all_book_data.extend(cleaned_data) # 增加请求间隔避免反爬 import time time.sleep(1) # 输出所有数据 output_result(all_book_data)七、总结静态网页爬取是爬虫开发的基础其核心流程 “请求 - 解析 - 提取 - 清洗 - 输出” 适用于所有爬虫场景。本文以豆瓣读书 Top250 为实战案例完整演示了静态网页爬取的全流程重点讲解了请求构造的反爬技巧、BeautifulSoup 的数据提取方法、数据清洗的标准化操作以及结果输出的多格式适配。在实际开发中需注意以下核心要点模拟浏览器请求避免被基础反爬机制拦截优先使用结构化解析工具如 BeautifulSoup提升代码可维护性数据清洗是提升数据可用性的关键需处理空值、格式、类型等问题多页爬取时需遵循网站分页规则增加请求间隔避免请求频率过高。掌握静态网页爬取的全流程能帮助开发者建立标准化的爬虫开发思维为后续处理动态网页如 AJAX 加载、JavaScript 渲染、复杂反爬网页奠定坚实基础。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

专门做旅游攻略的网站有哪些网站如何实现多语言

G6框架多语言配置实战:5步打造全球化图可视化应用 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript 项目地址: https://gitcode.com/gh_mirrors/g6/G6 想要让你的数据可视化项目突破语言障碍,服务全球用户?G6图…

张小明 2026/1/1 17:11:09 网站建设

网站制作农业外贸公司怎么找客户

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式学习应用,通过简单示例和可视化演示帮助新手理解Promise概念。应用应包含:1) Promise生命周期图示 2) 错误处理示例 3) 互动练习区&#xff0…

张小明 2026/1/2 1:26:06 网站建设

怎么改版网站保定做网站公司

快速获取Grammarly高级版Cookie的完整教程 【免费下载链接】autosearch-grammarly-premium-cookie 项目地址: https://gitcode.com/gh_mirrors/au/autosearch-grammarly-premium-cookie 想要免费享受Grammarly Premium高级语法检查功能吗?这个开源项目通过智…

张小明 2026/1/2 2:32:41 网站建设

宁波电器网站制作国外企业网络

在人工智能图像生成领域,一场静默的革命正在悄然发生。Black Forest Labs最新发布的FLUX.1 Kontext[dev]模型,以120亿参数的整流流Transformer架构,重新定义了文本引导图像编辑的技术边界。这款突破性模型不仅实现了对现有图像的精准指令修改…

张小明 2025/12/30 22:51:53 网站建设