利用 Python 爬取豆瓣电影数据+数据可视化

前言

今天通过 Python 的 Beautiful Soup4 库爬取豆瓣电影 Top 250 的数据,包括电影名称、描述、评分和评价人数等信息。通过这个项目,大家会学会如何使用爬虫技术来获取和分析网页数据。

1. 爬取目标

本次爬取的目标是豆瓣电影网站的 Top 250 排行榜,我们具体希望从每个电影条目中提取出以下信息:

  • 电影名称:每部影片的标题。

  • 电影描述:影片的简短描述或影响力语句。

  • 评分:影片的评分(通常在 10 分制中)。

  • 评价人数:对每部影片进行评分的用户人数。

  • 这些信息对于后续的电影分析、大数据处理或个人兴趣研究具有重要的意义。通过这个爬虫,我们不仅能够获取结构化数据,还能为之后的可视化和机器学习应用打基础。

    2. 所涉及知识点

    在本项目中,我们将涉及以下几个重要知识点:

  • HTTP 请求和响应:使用 requests 库读取网页数据。

  • HTML 解析:利用 Beautiful Soup 库处理 HTML 内容。

  • XPath 和 CSS 选择器:选择器在数据提取中的应用。

  • 数据存储:使用 csv 库将爬取到的数据保存到本地。

  • 基本的 Python 编程:编写、调试和运行 Python 程序的基础知识。

  • 3. 步骤分析

    3.1 安装必要的库

    首先,确保你的 Python 环境已经安装了 requestsBeautiful Soup4。可以在命令行中运行以下命令来安装这些库:

    pip install requests beautifulsoup4   
    

    3.2 发送 HTTP 请求

    我们首先需要向目标网站发送一个 HTTP GET 请求,获取网页内容。以下是实现这一功能的代码:

    import requests      # 定义请求的 URL 和 headers   url = "https://movie.douban.com/top250"   headers = {       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"   }      # 发送 GET 请求   response = requests.get(url, headers=headers)   response.encoding = 'utf-8'  # 设置编码方式   html_content = response.text  # 获取网页的 HTML 内容   print("网页内容加载成功!")   
    

    这段代码中,我们设置了请求头中的 User-Agent,确保请求不会因为缺乏浏览器信息而被目标网站拒绝。

    3.3 解析 HTML 内容

    获得网页内容后,我们使用 Beautiful Soup 对其进行解析,并提取所需的数据。以下是解析 HTML 的相关代码:

    from bs4 import BeautifulSoup      # 使用 Beautiful Soup 解析 HTML   soup = BeautifulSoup(html_content, 'html.parser')      # 提取电影名称、描述、评分和评价人数   movies = []   for item in soup.find_all('div', class_='item'):       title = item.find('span', class_='title').get_text()  # 电影名称       description = item.find('span', class_='inq')  # 电影描述       rating = item.find('span', class_='rating_num').get_text()  # 评分       votes = item.find('div', class_='star').find_all('span')[3].get_text()  # 评价人数              # 如果没有描述,将其置为空字符串       if description:           description = description.get_text()       else:           description = ''              movie = {           "title": title,           "description": description,           "rating": rating,           "votes": votes.replace('人评价', '').strip()       }       movies.append(movie)      print("数据提取成功!")   
    

    3.4 数据存储

    接下来,将提取到的数据存储到 CSV 文件中。这样我们就可以方便地进行数据分析了。以下是保存数据的相关代码:

    import csv      # 将数据保存到 CSV 文件   with open('douban_top250.csv', 'w', newline='', encoding='utf-8') as csvfile:       fieldnames = ['title', 'description', 'rating', 'votes']       writer = csv.DictWriter(csvfile, fieldnames=fieldnames)          writer.writeheader()  # 写入表头       for movie in movies:           writer.writerow(movie)  # 写入每一行数据      print("数据已成功保存到 douban_top250.csv")   
    

    在这段代码中,我们利用 csv.DictWriter 将提取到的电影信息写入 CSV 文件中,使其便于后续查看和分析。

    3.5 逐步总结

    到这里,我们的爬虫基本上已经完成核心功能。从发送请求到解析网页,再到数据存储,每一步都有每一步的重点和技术要点。

  • 对于复杂网页结构,提取数据时可以灵活使用 soup.findsoup.select 等方法。

  • 在处理描述、评分等数据时需要加以注意,有些字段可能不存在。

  • 4. 爬取结果

    成功运行上述代码后,在项目目录下会生成一个名为 douban_top250.csv 的文件,内容示例如下:

    title description rating votes
    霸王别姬 一部关于爱与痛的电影 9.6 233438
    肖申克的救赎 一场关于自由的斗争 9.5 235210
    这个杀手不太冷 一部关于爱情与孤独的故事 9.4 212343

    在 CSV 文件中,每一行对应一部电影,包含其名称、描述、评分和评价人数。这些数据为后续的分析和可视化提供了基础。

    5. 完整代码

    下面是整合前面所有步骤的完整代码,方便大家直接复制并运行:

    import requests   from bs4 import BeautifulSoup   import csv      # 定义请求的 URL 和 headers   url = "https://movie.douban.com/top250"   headers = {       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"   }      # 发送 GET 请求   response = requests.get(url, headers=headers)   response.encoding = 'utf-8'  # 设置编码方式   html_content = response.text  # 获取网页的 HTML 内容      # 使用 Beautiful Soup 解析 HTML   soup = BeautifulSoup(html_content, 'html.parser')      # 提取电影名称、描述、评分和评价人数   movies = []   for item in soup.find_all('div', class_='item'):       title = item.find('span', class_='title').get_text()  # 电影名称       description = item.find('span', class_='inq')  # 电影描述       rating = item.find('span', class_='rating_num').get_text()  # 评分       votes = item.find('div', class_='star').find_all('span')[3].get_text()  # 评价人数              # 如果没有描述,将其置为空字符串       if description:           description = description.get_text()       else:           description = ''              movie = {           "title": title,           "description": description,           "rating": rating,           "votes": votes.replace('人评价', '').strip()       }       movies.append(movie)      # 将数据保存到 CSV 文件   with open('douban_top250.csv', 'w', newline='', encoding='utf-8') as csvfile:       fieldnames = ['title', 'description', 'rating', 'votes']       writer = csv.DictWriter(csvfile, fieldnames=fieldnames)          writer.writeheader()  # 写入表头       for movie in movies:           writer.writerow(movie)  # 写入每一行数据      print("数据已成功保存到 douban_top250.csv")   
    

    关于Python技术储备

    学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

    👉Python学习路线汇总👈

    Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

    👉Python必备开发工具👈

    👉Python学习视频合集👈

    观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

    👉实战案例👈

    光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

    👉Python副业兼职路线&方法👈

    学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

    作者:bug鸭陆

    物联沃分享整理
    物联沃-IOTWORD物联网 » 利用 Python 爬取豆瓣电影数据+数据可视化

    发表回复