网站开发python,附近人才招聘市场,网站尾部分页数字怎么做,iis怎么建网站前言
在数据采集与分析的工作场景中#xff0c;Python 爬虫是获取网络公开数据的核心技术手段#xff0c;而将爬取到的数据规范化存储则是后续数据处理的基础环节。CSV#xff08;逗号分隔值#xff09;格式作为一种轻量级、跨平台的表格文件格式#xff0c;因其结构简单…前言在数据采集与分析的工作场景中Python 爬虫是获取网络公开数据的核心技术手段而将爬取到的数据规范化存储则是后续数据处理的基础环节。CSV逗号分隔值格式作为一种轻量级、跨平台的表格文件格式因其结构简单、易读取、兼容性强的特点成为爬虫数据存储的首选方式之一。本文将从实战角度出发系统讲解如何通过 Python 实现网页数据爬取并将结构化数据精准存入 CSV 表格同时兼顾代码的规范性、可读性与可扩展性帮助开发者掌握爬虫数据持久化的核心方法。摘要本文以「豆瓣电影 Top250」https://movie.douban.com/top250为爬取目标详细阐述 Python 爬虫从请求发送、数据解析到 CSV 数据写入的全流程实现。内容涵盖 requests 库发起 HTTP 请求、BeautifulSoup 库解析 HTML 页面、csv 模块处理表格数据存储等核心技术点同时针对编码问题、数据结构化、异常处理等关键环节给出解决方案最终实现爬取电影名称、评分、简介等信息并写入 CSV 文件的完整实战案例。一、技术栈与环境准备1.1 核心库介绍实现本次爬虫实战需依赖以下 Python 库各库的核心作用如下表所示库名称核心作用安装命令requests发送 HTTP/HTTPS 请求获取网页源代码pip install requestsbeautifulsoup4解析 HTML/XML 页面提取结构化数据pip install beautifulsoup4csvPython 内置库处理 CSV 文件的读写操作无需安装内置fake-useragent生成随机 User-Agent规避基础反爬机制pip install fake-useragent1.2 环境要求Python 版本3.7 及以上推荐 3.9-3.11操作系统Windows/macOS/Linux 均可网络环境可正常访问目标网站豆瓣电影 Top250二、爬虫基础原理与合规性说明2.1 爬虫核心流程本次实战的爬虫流程遵循「请求 - 解析 - 存储」的经典逻辑请求阶段模拟浏览器向目标网页发送 GET 请求获取网页 HTML 源代码解析阶段通过 BeautifulSoup 定位 HTML 标签提取所需的电影数据存储阶段将解析后的结构化数据按行写入 CSV 文件完成数据持久化。2.2 合规爬取说明在爬取公开数据前需遵守以下合规原则查看目标网站的 robots.txt 协议豆瓣 robots.txthttps://www.douban.com/robots.txt确认爬取范围未被禁止控制请求频率避免短时间内高频请求给服务器造成压力仅爬取公开的非商业数据不得用于违规用途设置合理的请求头如 User-Agent模拟正常浏览器访问。三、实战代码实现3.1 完整代码python运行import requests from bs4 import BeautifulSoup import csv import time from fake_useragent import UserAgent # 配置项 TARGET_URL https://movie.douban.com/top250 CSV_FILE_PATH douban_top250.csv HEADERS { User-Agent: UserAgent().random, Accept-Language: zh-CN,zh;q0.9, Connection: keep-alive } # 重试次数 RETRY_TIMES 3 def get_page_html(url): 获取指定URL的网页HTML源代码 :param url: 目标网页URL :return: 网页HTML文本失败返回None for i in range(RETRY_TIMES): try: response requests.get(url, headersHEADERS, timeout10) # 校验响应状态码 response.raise_for_status() # 设置正确的编码 response.encoding response.apparent_encoding return response.text except requests.exceptions.RequestException as e: print(f第{i1}次请求失败错误信息{e}) time.sleep(2) # 重试前休眠2秒 return None def parse_movie_data(html): 解析HTML页面提取电影数据 :param html: 网页HTML文本 :return: 电影数据列表每个元素为字典 movie_list [] soup BeautifulSoup(html, html.parser) # 定位电影列表容器 movie_items soup.find_all(div, class_item) for item in movie_items: # 提取排名 rank item.find(em).text # 提取电影名称 title item.find(span, class_title).text # 提取评分 score item.find(span, class_rating_num).text # 提取评价人数 comment_num item.find(div, class_star).find_all(span)[-1].text.replace(人评价, ) # 提取简介部分电影无简介做容错处理 quote_tag item.find(span, class_inq) quote quote_tag.text if quote_tag else 无简介 # 构造电影数据字典 movie_info { 排名: rank, 电影名称: title, 评分: score, 评价人数: comment_num, 简介: quote } movie_list.append(movie_info) return movie_list def write_to_csv(data, file_path): 将电影数据写入CSV文件 :param data: 电影数据列表 :param file_path: CSV文件保存路径 # 定义CSV表头 headers [排名, 电影名称, 评分, 评价人数, 简介] # 打开文件设置newline避免空行encoding设置为utf-8-sig解决中文乱码 with open(file_path, w, newline, encodingutf-8-sig) as f: writer csv.DictWriter(f, fieldnamesheaders) # 写入表头 writer.writeheader() # 写入数据行 writer.writerows(data) print(f数据已成功写入CSV文件{file_path}) def crawl_douban_top250(): 爬取豆瓣电影Top250并写入CSV all_movie_data [] page 0 while True: # 构造分页URL豆瓣Top250每页25条偏移量为page*25 page_url f{TARGET_URL}?start{page*25}filter print(f正在爬取第{page1}页{page_url}) # 获取页面HTML html get_page_html(page_url) if not html: print(f第{page1}页爬取失败终止爬取) break # 解析电影数据 movie_data parse_movie_data(html) if not movie_data: print(已爬取完所有数据终止爬取) break # 合并数据 all_movie_data.extend(movie_data) # 休眠1秒降低请求频率 time.sleep(1) page 1 # 将所有数据写入CSV if all_movie_data: write_to_csv(all_movie_data, CSV_FILE_PATH) else: print(未爬取到任何数据) if __name__ __main__: # 执行主爬取函数 crawl_douban_top250()3.2 代码核心原理解析1请求模块get_page_html 函数功能向目标 URL 发送 GET 请求获取网页 HTML 源代码核心逻辑使用fake-useragent生成随机 User-Agent避免被服务器识别为爬虫设置 10 秒超时时间防止请求长时间阻塞实现 3 次重试机制请求失败后休眠 2 秒再重试提升稳定性自动识别网页编码response.apparent_encoding避免乱码。2解析模块parse_movie_data 函数功能通过 BeautifulSoup 解析 HTML提取结构化电影数据核心逻辑使用html.parser解析器解析 HTML 文本通过find_all定位所有电影条目div.item针对每个条目通过标签类名精准提取排名、名称、评分等字段对「简介」字段做容错处理部分电影无简介避免程序报错将每条电影数据封装为字典便于后续 CSV 写入。3存储模块write_to_csv 函数功能将解析后的电影数据写入 CSV 文件核心逻辑使用csv.DictWriter按字典键值对写入数据无需手动拼接逗号设置newline避免 CSV 文件出现空行编码设置为utf-8-sig解决 Windows 系统下 CSV 中文乱码问题先写入表头排名、电影名称等再批量写入数据行。4主函数crawl_douban_top250 函数功能实现分页爬取逻辑整合请求、解析、存储流程核心逻辑构造分页 URL豆瓣 Top250 分页参数为start每页 25 条循环爬取每页数据直到解析不到电影条目为止每页爬取后休眠 1 秒控制请求频率合并所有页面数据后一次性写入 CSV 文件提升效率。3.3 代码运行结果1控制台输出plaintext正在爬取第1页https://movie.douban.com/top250?start0filter 正在爬取第2页https://movie.douban.com/top250?start25filter 正在爬取第3页https://movie.douban.com/top250?start50filter ... 正在爬取第10页https://movie.douban.com/top250?start225filter 数据已成功写入CSV文件douban_top250.csv2CSV 文件输出效果排名电影名称评分评价人数简介1肖申克的救赎9.72651197希望让人自由2霸王别姬9.61923302风华绝代3阿甘正传9.51852050一部美国近现代史...............250摩登时代9.3655690永不落幕的经典四、常见问题与解决方案4.1 CSV 中文乱码问题现象打开 CSV 文件后中文显示为乱码解决方案写入文件时指定编码为utf-8-sig而非utf-8utf-8-sig会添加 BOM 头让 Windows 记事本、Excel 等工具正确识别编码。4.2 爬取数据为空原因目标网页结构变更标签类名或路径修改请求头设置不当被服务器拒绝访问网络问题导致请求失败解决方案重新审查网页 HTML 结构更新解析规则验证 User-Agent 等请求头是否有效可直接使用浏览器的 User-Agent增加请求重试机制打印错误日志定位问题。4.3 爬取速度过快被限制现象爬取几页后请求失败返回 403/429 状态码解决方案增加每页爬取的休眠时间如time.sleep(1)改为time.sleep(2)使用代理 IP 池分散请求来源降低并发请求数采用单线程爬取。五、总结与扩展5.1 实战总结本文通过豆瓣电影 Top250 爬取案例完整实现了「请求 - 解析 - 存储」的爬虫闭环核心要点包括合规爬取是前提需遵守 robots 协议和网站规则异常处理是保障重试机制、超时设置能提升爬虫稳定性数据结构化是关键字典格式便于 CSV 写入和后续数据处理编码问题需重视utf-8-sig是解决中文乱码的通用方案。5.2 扩展方向数据扩展增加爬取电影导演、主演、上映时间等更多字段功能扩展实现数据去重、增量爬取仅爬取新增电影性能扩展使用多线程 / 异步aiohttp提升爬取速度存储扩展将数据同时写入 MySQL、MongoDB 等数据库满足不同存储需求反爬扩展结合验证码识别、Cookie 池等应对更严格的反爬机制。通过本次实战开发者可掌握爬虫数据存入 CSV 的核心方法后续可基于此框架适配不同目标网站的爬取需求实现更复杂的数据分析场景。