尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python爬虫实战:网页数据抓取与Excel存储教程
1. Python爬虫入门实战从零开始抓取网页数据并保存到Excel作为一名爬虫开发者我经常遇到新手朋友询问如何快速上手Python爬虫。今天我就分享一个经过实战检验的爬虫模板这个代码可以直接套用帮你快速理解爬虫的基本原理和工作流程。这个爬虫示例可以抓取网页上的电影信息包括电影详情链接、图片、片名、评分、评价数和概况并将这些数据保存到本地的Excel文件中。对于初学者来说这是一个非常实用的入门案例因为它涵盖了爬虫开发中最核心的几个环节发送请求、解析HTML、提取数据和存储结果。2. 爬虫代码结构解析2.1 核心模块介绍我们先来看下这个爬虫用到了哪些Python库import re import urllib.error import urllib.request import xlwt from bs4 import BeautifulSouprePython的正则表达式模块用于从HTML中提取特定模式的数据urllib.request和urllib.errorPython内置的HTTP请求模块用于发送请求和处理网络错误xlwt用于创建和写入Excel文件的库BeautifulSoup强大的HTML解析库可以方便地从网页中提取数据提示在实际项目中我建议使用requests替代urllib因为它更简单易用。但这里使用标准库是为了减少外部依赖。2.2 主函数逻辑def main(): baseurl http://jshk.com.cn datelist getDate(baseurl) savepath .\jshk.xls saveDate(datelist, savepath)主函数main()是整个爬虫的入口它做了三件事定义基础URL调用getDate()函数获取数据调用saveDate()函数将数据保存到Excel3. 数据抓取实现细节3.1 正则表达式模式定义findlink re.compile(ra href(.*?)) findimg re.compile(rimg.*src(.*?), re.S) findtitle re.compile(rspan classtitle(.*)/span) findrating re.compile(rspan classrating_num propertyv:average(.*)/span) findjudge re.compile(rspan(d*)人评价/span) findinq re.compile(rspan classinq(.*)/span)这些正则表达式定义了如何从HTML中提取我们需要的数据。每个模式都针对特定的HTML结构和属性findlink提取a标签的href属性findimg提取img标签的src属性findtitle提取class为title的span标签内容findrating提取评分数据findjudge提取评价人数findinq提取电影概况注意正则表达式中的re.S标志表示.匹配任意字符包括换行符。3.2 数据获取函数getDate()def getDate(baseurl): datalist [] for i in range(0, 10): url baseurl str(i*25) html askURL(url) soup BeautifulSoup(html, html.parser) for item in soup.find_all(div, class_item): data [] item str(item) link re.findall(findlink, item)[0] data.append(link) img re.findall(findimg, item)[0] data.append(img) title re.findall(findtitle, item)[0] rating re.findall(findrating, item)[0] data.append(rating) judge re.findall(findjudge, item)[0] data.append(judge) inq re.findall(findinq, item) if len(inq) ! 0: inq inq[0].replace(。, ) data.append(inq) else: data.append( ) datalist.append(data) return datalist这个函数是爬虫的核心部分它完成了以下工作构建分页URL每页25条数据共10页调用askURL()获取网页HTML使用BeautifulSoup解析HTML找到所有class为item的div元素对每个元素使用正则表达式提取具体数据将提取的数据组织成列表并返回3.3 请求函数askURL()def askURL(url): head { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36 } request urllib.request.Request(url, headershead) html try: response urllib.request.urlopen(request) html response.read().decode(utf-8) except urllib.error.URLError as e: if hasattr(e, code): print(e.code) if hasattr(e, reason): print(e.reason) return html这个函数负责发送HTTP请求并获取响应设置User-Agent头部模拟浏览器访问创建Request对象发送请求并处理可能的错误返回解码后的HTML内容实操心得设置合适的User-Agent非常重要很多网站会拒绝没有User-Agent或使用默认Python User-Agent的请求。4. 数据存储实现4.1 保存数据到Exceldef saveDate(datalist, savepath): workbook xlwt.Workbook(encodingutf-8) worksheet workbook.add_sheet(电影, cell_overwrite_okTrue) col (电影详情, 图片, 影片, 评分, 评价数, 概况) for i in range(0, 5): worksheet.write(0, i, col[i]) for i in range(0, 250): print(第%d条 % (i1)) data datalist[i] for j in range(0, 5): worksheet.write(i1, j, data[j]) workbook.save(savepath)这个函数将抓取到的数据保存到Excel文件创建Workbook对象添加一个工作表写入表头遍历数据列表逐行写入数据保存文件注意cell_overwrite_okTrue参数允许覆盖已存在的单元格内容。5. 爬虫实战中的常见问题与解决方案5.1 反爬虫机制应对在实际爬虫开发中你可能会遇到各种反爬虫措施。以下是一些常见问题及解决方法请求被拒绝解决方案设置合理的请求头包括User-Agent、Referer等示例headers {User-Agent: Mozilla/5.0...}IP被封禁解决方案使用代理IP、设置请求延迟示例time.sleep(random.uniform(1, 3))动态加载内容解决方案使用Selenium或Pyppeteer等工具模拟浏览器行为5.2 数据提取问题正则表达式匹配失败检查HTML结构是否发生变化使用更宽松的正则模式考虑使用BeautifulSoup的CSS选择器替代正则数据编码问题确保正确解码响应内容示例response.read().decode(utf-8)5.3 性能优化建议多线程/异步请求使用concurrent.futures或asyncio提高爬取效率增量爬取记录已爬取的URL避免重复爬取数据存储优化对于大量数据考虑使用数据库替代Excel6. 代码扩展与定制6.1 如何修改代码爬取其他网站要使用这个模板爬取其他网站你需要修改以下几个部分基础URL修改baseurl变量HTML解析规则根据目标网站的HTML结构调整正则表达式可能需要修改BeautifulSoup的选择器数据字段根据需求调整要提取的数据字段相应修改Excel的表头和写入逻辑6.2 代码改进建议使用配置文件将URL、正则模式等配置信息提取到单独的文件中添加日志功能使用logging模块记录爬取过程异常处理增强对网络请求、数据解析等环节添加更细致的异常处理7. 爬虫开发最佳实践7.1 法律与道德注意事项遵守robots.txt爬取前检查目标网站的robots.txt文件尊重网站的爬取限制控制请求频率避免对目标网站造成过大负担设置合理的请求间隔数据使用限制遵守网站的服务条款不要将爬取的数据用于商业用途除非获得授权7.2 开发技巧分享使用浏览器开发者工具分析网页结构查看网络请求先小规模测试先爬取少量页面测试代码确认无误后再扩大规模保存原始HTML调试时可以先保存网页HTML避免反复请求同一页面这个爬虫模板虽然简单但涵盖了爬虫开发的核心要素。通过理解和修改这个代码你可以快速开发出满足各种需求的爬虫程序。在实际项目中你可能还需要考虑更多因素如分布式爬取、数据清洗、持久化存储等但这个模板为你提供了一个很好的起点。
RELATED

相关推荐

行星齿轮内啮合副时变啮合刚度MATLAB计算解析

行星齿轮内啮合副时变啮合刚度MATLAB计算解析

1. 行星齿轮内啮合副时变啮合刚度计算程序解析在齿轮传动系统设计与分析中,时变啮合刚度(TVMS)是影响系统动态特性的关键参数。本文介绍的MATLAB程序套件专门用于计算行星齿轮系统中"行星轮-内齿圈"内啮合副的时变啮合刚度,基于势能法开发&…

📅 2026/9/17 7:50:59
Flutter+OpenHarmony打造智慧井盖管理系统

Flutter+OpenHarmony打造智慧井盖管理系统

1. 项目背景与核心价值城市井盖管理一直是市政基础设施维护中的痛点问题。传统人工巡检方式效率低下,难以及时发现井盖缺失、破损等问题,存在严重安全隐患。我们团队基于Flutter for OpenHarmony框架开发的这款城市井盖地图App,实现了井盖信息…

📅 2026/9/17 7:50:59
AI Agent工程师:百万年薪背后的技术栈与职业路径

AI Agent工程师:百万年薪背后的技术栈与职业路径

1. AI Agent工程师的职业前景分析最近半年,AI Agent工程师这个职位突然在招聘市场上炙手可热。作为一位在AI行业摸爬滚打多年的从业者,我亲眼目睹了这个岗位从无人问津到年薪百万的惊人转变。那么,这个看似一夜爆红的职业到底是怎么回事&…

📅 2026/9/17 7:50:59
MORE NEWS

更多资讯

📰

Spring Boot 实战:流浪宠物管理系统开发与部署全流程

简介:基于 Spring Boot 的 Java Web 流浪宠物管理系统毕业设计资料包,面向高校毕业设计学生、Java Web 初学者及流浪宠物救助站工作人员。系统覆盖宠物档案、救助进度、志愿者信息等核心模块,实现宠物信息录入、查询、统计与分析,…

📰

GD25Q80E实战:从SPI时序到STM32 QSPI外设完整指南

每次有同学拿着开发板跑来问“我想外挂一颗Flash,GD25Q80E和W25Q16选哪个”,我都会先反问一句:你打算让它存什么?字库、固件、参数还是日志?别看SPI NOR Flash的命令表翻来覆去就那么十几条,很多人折腾一整…

📰

五层级领导力实战:从职位权力到价值观感召

1. 领导力层级的本质解析领导力并非与生俱来的天赋,而是一种可以通过系统学习和实践不断提升的能力。在我十五年的团队管理实践中,深刻体会到领导力的提升就像攀登一座五层高塔,每一层都需要不同的技能和心态转变。最基础的领导力来自职位赋予…

📰

SpringBoot+Vue城中村流动人口管理系统设计与实践

1. 项目背景与需求分析城中村流动人口管理一直是基层治理的难点痛点。以松北村为例,这个典型的城乡结合部聚集了超过2万名外来务工人员,但房东们还在用纸质本子记录租客信息,村委会掌握的数据往往滞后3-6个月。去年疫情期间,光是排…

📰

LTE附着被ESM cause#19拒绝?从信令原理到现场排查实战

前几天一个项目现场的群里炸了锅:用户投诉4G信号满格,但刷不了视频、微信只能收个“正在连接”,VoLTE也注册不上。后台工程师拉指标一看,MME的Attach Reject次数蹭蹭涨,按Cause值一分类,排第一的就是cause#…

📰

React Native与HarmonyOS跨平台弹性动画优化实践

1. 项目概述:当React Native遇上HarmonyOS去年在重构一个运动健康类App时,我们遇到了一个典型的多端适配难题:如何在HarmonyOS和Android/iOS上实现完全一致的弹性动画效果?传统的React Native动画方案在HarmonyOS上表现不稳定&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬