【Python爬虫五十个小案例】爬取豆瓣影戏Top250

[复制链接]
发表于 2025-12-20 23:18:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

博客主页:小馒头学python
本文专栏: Python爬虫五十个小案例
专栏简介:分享五十个Python爬虫小案例

🪲前言

   在这篇博客中,我们将学习怎样使用Python爬取豆瓣影戏Top250的数据。我们将使用requests库来发送HTTP哀求,BeautifulSoup库来剖析HTML页面,并将数据存储到CSV文件中。这个爬虫将自动获取豆瓣影戏Top250页面的信息,包罗影戏名称、导演、主演、评分等详细信息
  豆瓣影戏Top250是一个包罗豆瓣评分最高的250部影戏的榜单,是影戏爱好者查找影戏的一大宝库。本博客将引导各人怎样通过编写Python爬虫自动获取豆瓣影戏Top250的数据
🪲情况预备

起首,我们须要安装一些Python库来完资本次使命。以下是我们将使用的库:


  • requests:用来发送HTTP哀求并获取网页内容。
  • BeautifulSoup:用来剖析HTML页面,提取我们须要的数据。
  • csv:将爬取的数据生存到CSV文件中。
由于我们使用的是Python举行爬虫,以是我们使用的下令行是
pip install requests beautifulsoup4 csv
🪲爬虫原理与分析

豆瓣影戏Top250的URL是 https://movie.douban.com/top250。页面内容是分页体现的,每一页展示25部影戏,最多5页。我们须要访问这些页面并提取影戏数据
数据结构分析
每一部影戏的信息在HTML结构中都有相应的标签,我们须要从中提取出以下信息:


  • 影戏名称
  • 影戏评分
  • 影戏导演
  • 影戏主演
  • 影戏年份
  • 影戏范例
通过使用BeautifulSoup剖析HTML,我们可以轻松提取这些信息
🪲代码详细的实现

发送哀求获取网页内容

我们起首使用requests库发送哀求来获取网页内容。豆瓣会返回HTML页面,我们将把这些内容通报给BeautifulSoup举行剖析
  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 设置请求头,避免被豆瓣屏蔽
  4. headers = {
  5.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
  6. }
  7. # 获取豆瓣电影Top250的前五页数据
  8. base_url = "https://movie.douban.com/top250"
  9. movie_list = []
  10. def get_page(url):
  11.     response = requests.get(url, headers=headers)
  12.     return response.text
复制代码
剖析网页内容

使用BeautifulSoup剖析HTML页面,找到每部影戏的信息。每部影戏的信息包罗在div标签中,类名为item
  1. def parse_page(html):
  2.     soup = BeautifulSoup(html, 'html.parser')
  3.     movies = soup.find_all('div', class_='item')
  4.     for movie in movies:
  5.         title = movie.find('span', class_='title').text
  6.         rating = movie.find('span', class_='rating_num').text
  7.         director, actors = movie.find('div', class_='bd').find('p').text.strip().split("\n")[:2]
  8.         year = movie.find('div', class_='bd').find('p').text.strip().split("\n")[0]
  9.         movie_type = movie.find('span', class_='genre').text.strip()
  10.         
  11.         movie_info = {
  12.             'title': title,
  13.             'rating': rating,
  14.             'director': director,
  15.             'actors': actors,
  16.             'year': year,
  17.             'type': movie_type
  18.         }
  19.         
  20.         movie_list.append(movie_info)
复制代码
提取影戏数据

我们如今可以循环访问每一页的URL并提取数据。豆瓣影戏Top250有5页,URL结构为https://movie.douban.com/top250?start=X,此中X为每页的起始索引(0, 25, 50, …)
接下来我们的其他案例也会采取雷同的分析方式,同砚们可以
  1. def main():
  2.     for start in range(0, 250, 25):
  3.         url = f"{base_url}?start={start}"
  4.         html = get_page(url)
  5.         parse_page(html)
  6.     # 输出结果
  7.     for movie in movie_list:
  8.         print(movie)
  9. if __name__ == "__main__":
  10.     main()
复制代码
生存数据到CSV文件大概Excel文件

为了方便后续的数据分析,我们可以将数据生存到CSV文件中
  1. import csv
  2. def save_to_csv():
  3.     keys = movie_list[0].keys()
  4.     with open('douban_top250.csv', 'w', newline='', encoding='utf-8') as output_file:
  5.         dict_writer = csv.DictWriter(output_file, fieldnames=keys)
  6.         dict_writer.writeheader()
  7.         dict_writer.writerows(movie_list)
  8. save_to_csv()
复制代码
如果是Excel那么可以参考下面的案例代码
  1. import pandas as pd  # 导入pandas库
  2. def save_to_excel():
  3.     df = pd.DataFrame(movie_list)  # 将电影列表转换为DataFrame
  4.     df.to_excel('douban_top250.xlsx', index=False, engine='openpyxl')  # 保存为Excel文件
复制代码
🪲完备的代码

  1. import csv
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import pandas as pd  # 导入pandas库
  5. # 设置请求头,避免被豆瓣屏蔽
  6. headers = {
  7.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
  8. }
  9. # 获取豆瓣电影Top250的前五页数据
  10. base_url = "https://movie.douban.com/top250"
  11. movie_list = []
  12. # 发送请求获取网页内容
  13. def get_page(url):
  14.     response = requests.get(url, headers=headers)
  15.     return response.text
  16. # 解析网页内容并提取电影信息
  17. def parse_page(html):
  18.     soup = BeautifulSoup(html, 'html.parser')
  19.     movies = soup.find_all('div', class_='item')
  20.     for movie in movies:
  21.         title = movie.find('span', class_='title').text
  22.         rating = movie.find('span', class_='rating_num').text
  23.         director_actors = movie.find('div', class_='bd').find('p').text.strip().split("\n")[:2]
  24.         director = director_actors[0]
  25.         actors = director_actors[1] if len(director_actors) > 1 else ''
  26.         # 处理电影类型,避免找不到的情况
  27.         genre_tag = movie.find('span', class_='genre')
  28.         movie_type = genre_tag.text.strip() if genre_tag else '未知'
  29.         # 处理电影年份
  30.         year_tag = movie.find('div', class_='bd').find('p').text.strip().split("\n")[0]
  31.         # 构建电影信息字典
  32.         movie_info = {
  33.             'title': title,
  34.             'rating': rating,
  35.             'director': director,
  36.             'actors': actors,
  37.             'year': year_tag,
  38.             'type': movie_type
  39.         }
  40.         # 将电影信息添加到列表中
  41.         movie_list.append(movie_info)
  42. # 爬取豆瓣电影Top250的所有页面
  43. def main():
  44.     # 遍历前5页的豆瓣Top250
  45.     for start in range(0, 250, 25):
  46.         url = f"{base_url}?start={start}"
  47.         html = get_page(url)
  48.         parse_page(html)
  49.     # 输出结果
  50.     for movie in movie_list:
  51.         print(movie)
  52. def save_to_csv():
  53.     keys = movie_list[0].keys()  # 获取电影数据字典的键(即列名)
  54.     # 写入CSV文件
  55.     with open('douban_top250.csv', 'w', newline='', encoding='utf-8-sig') as output_file:
  56.         dict_writer = csv.DictWriter(output_file, fieldnames=keys)
  57.         dict_writer.writeheader()  # 写入列名
  58.         dict_writer.writerows(movie_list)  # 写入电影数据
  59. # 主函数
  60. if __name__ == "__main__":
  61.     main()
  62.     save_to_csv()
  63.     print("爬取完成,数据已保存到 douban_top250.csv")
复制代码
🪲运行效果

运行上述代码后,你将会得到一个名为douban_top250.csv的文件,文件内容如下所示:

下图是生存为csv文件的格式,这里留意encoding=‘utf-8-sig’,encoding如果便是utf-8,那么直接双击csv文件会乱码的

🪲总结

本文告急先容了如果使用简朴的爬虫举行数据的爬取,这里告急举行豆瓣影戏Top250的数据爬取,我们使用的库就是requests、bs4、pandas、csv等库,本节告急重在案例的实践,还想相识更多的爬虫案例可以关注我的专栏
Python爬虫五十个小案例:https://blog.csdn.net/null18/category_12840403.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12840403&sharerefer=PC&sharesource=null18&sharefrom=from_link
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表