Python爬虫实战5分钟搞定豆瓣电影TOP250数据抓取附完整代码刚接触Python爬虫时很多人会被各种概念和库搞得晕头转向。其实爬虫的核心逻辑非常简单发送请求→获取数据→解析数据→存储数据。今天我们就用最直接的方式带你在5分钟内完成豆瓣电影TOP250的数据抓取。这个案例特别适合想快速看到成果的初学者。不需要复杂的配置几行代码就能把电影名称、评分、导演等信息全部抓取下来。我们会用最轻量的依赖库并解释每一行代码的作用让你真正理解爬虫的运行机制。1. 环境准备与工具选择在开始之前确保你的Python环境已经安装了以下库pip install requests lxml为什么选择这两个库requests是Python中最简单易用的HTTP库而lxml的解析速度比BeautifulSoup快很多特别适合处理大量数据。对于初学者来说这两个库的组合既轻量又高效。提示如果你在使用国内网络可能会遇到访问豆瓣速度慢的问题。可以尝试在非高峰时段运行代码。2. 分析网页结构与数据定位首先打开豆瓣电影TOP250页面我们需要观察几个关键点URL规律每页显示25部电影翻页时URL中的start参数按25递增数据位置所有电影信息都包含在ol classgrid_view下的li标签中关键字段电影名称span classtitle评分span classrating_num基本信息div classbd下的第一个p标签通过浏览器开发者工具(F12)我们可以快速验证这些选择器是否准确。这是爬虫开发中最关键的步骤——确保你能准确定位到目标数据。3. 完整爬虫代码实现下面是完整的爬虫代码我们将其拆解为几个部分来理解import requests from lxml import etree import re def get_douban_top250(): headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } with open(douban_top250.csv, w, encodingutf-8) as f: f.write(电影名,导演,主演,年份,国家,类型,评分,短评\n) for start in range(0, 250, 25): url fhttps://movie.douban.com/top250?start{start} response requests.get(url, headersheaders) html etree.HTML(response.text) for item in html.xpath(//ol[classgrid_view]/li): name item.xpath(.//span[classtitle][1]/text())[0] info item.xpath(.//div[classbd]/p[1]/text())[0].strip() score item.xpath(.//span[classrating_num]/text())[0] quote item.xpath(.//span[classinq]/text())[0] if item.xpath(.//span[classinq]/text()) else # 解析导演、年份等信息 director re.search(r导演:(.*?)\s, info).group(1) if re.search(r导演:(.*?)\s, info) else year re.search(r(\d{4}), info).group(1) if re.search(r(\d{4}), info) else country info.split(/)[-2].strip() genre info.split(/)[-1].strip() f.write(f{name},{director},,{year},{country},{genre},{score},{quote}\n) print(f已获取: {name}) if __name__ __main__: get_douban_top250()代码关键点解析请求头设置豆瓣会检查User-Agent我们需要模拟浏览器访问分页处理通过start参数实现自动翻页每页25条共10页数据清洗使用正则表达式提取导演、年份等结构化信息异常处理有些电影可能缺少某些字段代码做了简单容错4. 数据存储与后续分析我们将数据保存为CSV格式这种结构化的存储方式非常适合后续分析。你可以用Excel直接打开或者用Python的pandas库进行更深入的分析import pandas as pd df pd.read_csv(douban_top250.csv) # 查看评分最高的10部电影 print(df.sort_values(评分, ascendingFalse).head(10))如果想进一步扩展这个项目可以考虑添加异常重试机制提高爬虫稳定性使用多线程加速抓取过程将数据存入数据库而非CSV文件对抓取的数据进行可视化分析5. 常见问题与解决方案在实际运行中你可能会遇到以下问题问题现象可能原因解决方案返回403错误请求被服务器拒绝更换User-Agent或添加更多请求头数据缺失XPath选择器不准确重新检查网页结构更新选择器程序突然终止网络波动或字段缺失添加try-catch块捕获异常最后提醒一点爬虫虽然强大但一定要遵守网站的robots.txt规则控制请求频率避免给服务器造成过大压力。
Python爬虫实战:5分钟搞定豆瓣电影TOP250数据抓取(附完整代码)
Python爬虫实战5分钟搞定豆瓣电影TOP250数据抓取附完整代码刚接触Python爬虫时很多人会被各种概念和库搞得晕头转向。其实爬虫的核心逻辑非常简单发送请求→获取数据→解析数据→存储数据。今天我们就用最直接的方式带你在5分钟内完成豆瓣电影TOP250的数据抓取。这个案例特别适合想快速看到成果的初学者。不需要复杂的配置几行代码就能把电影名称、评分、导演等信息全部抓取下来。我们会用最轻量的依赖库并解释每一行代码的作用让你真正理解爬虫的运行机制。1. 环境准备与工具选择在开始之前确保你的Python环境已经安装了以下库pip install requests lxml为什么选择这两个库requests是Python中最简单易用的HTTP库而lxml的解析速度比BeautifulSoup快很多特别适合处理大量数据。对于初学者来说这两个库的组合既轻量又高效。提示如果你在使用国内网络可能会遇到访问豆瓣速度慢的问题。可以尝试在非高峰时段运行代码。2. 分析网页结构与数据定位首先打开豆瓣电影TOP250页面我们需要观察几个关键点URL规律每页显示25部电影翻页时URL中的start参数按25递增数据位置所有电影信息都包含在ol classgrid_view下的li标签中关键字段电影名称span classtitle评分span classrating_num基本信息div classbd下的第一个p标签通过浏览器开发者工具(F12)我们可以快速验证这些选择器是否准确。这是爬虫开发中最关键的步骤——确保你能准确定位到目标数据。3. 完整爬虫代码实现下面是完整的爬虫代码我们将其拆解为几个部分来理解import requests from lxml import etree import re def get_douban_top250(): headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } with open(douban_top250.csv, w, encodingutf-8) as f: f.write(电影名,导演,主演,年份,国家,类型,评分,短评\n) for start in range(0, 250, 25): url fhttps://movie.douban.com/top250?start{start} response requests.get(url, headersheaders) html etree.HTML(response.text) for item in html.xpath(//ol[classgrid_view]/li): name item.xpath(.//span[classtitle][1]/text())[0] info item.xpath(.//div[classbd]/p[1]/text())[0].strip() score item.xpath(.//span[classrating_num]/text())[0] quote item.xpath(.//span[classinq]/text())[0] if item.xpath(.//span[classinq]/text()) else # 解析导演、年份等信息 director re.search(r导演:(.*?)\s, info).group(1) if re.search(r导演:(.*?)\s, info) else year re.search(r(\d{4}), info).group(1) if re.search(r(\d{4}), info) else country info.split(/)[-2].strip() genre info.split(/)[-1].strip() f.write(f{name},{director},,{year},{country},{genre},{score},{quote}\n) print(f已获取: {name}) if __name__ __main__: get_douban_top250()代码关键点解析请求头设置豆瓣会检查User-Agent我们需要模拟浏览器访问分页处理通过start参数实现自动翻页每页25条共10页数据清洗使用正则表达式提取导演、年份等结构化信息异常处理有些电影可能缺少某些字段代码做了简单容错4. 数据存储与后续分析我们将数据保存为CSV格式这种结构化的存储方式非常适合后续分析。你可以用Excel直接打开或者用Python的pandas库进行更深入的分析import pandas as pd df pd.read_csv(douban_top250.csv) # 查看评分最高的10部电影 print(df.sort_values(评分, ascendingFalse).head(10))如果想进一步扩展这个项目可以考虑添加异常重试机制提高爬虫稳定性使用多线程加速抓取过程将数据存入数据库而非CSV文件对抓取的数据进行可视化分析5. 常见问题与解决方案在实际运行中你可能会遇到以下问题问题现象可能原因解决方案返回403错误请求被服务器拒绝更换User-Agent或添加更多请求头数据缺失XPath选择器不准确重新检查网页结构更新选择器程序突然终止网络波动或字段缺失添加try-catch块捕获异常最后提醒一点爬虫虽然强大但一定要遵守网站的robots.txt规则控制请求频率避免给服务器造成过大压力。