一、爬取豆瓣电影Top250饼图
我们可以使用Python的matplotlib库来创建豆瓣电影Top250的饼图。代码如下:
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
data = pd.read_csv('douban_top250.csv', encoding='utf-8')
# 统计电影类型的数量
genre_count = pd.value_counts(data['genre'].values, sort=True)
# 取前10个电影类型
top10_genre = genre_count.head(10)
# 绘制饼图
plt.pie(top10_genre, labels=top10_genre.index, autopct='%1.1f%%')
plt.title('豆瓣电影Top250电影类型占比')
plt.show()
通过这个饼图,我们可以看到豆瓣电影Top250的电影类型分布情况。
二、爬取豆瓣电影Top250详细教程
爬取豆瓣电影Top250是一个非常常见的Web爬虫例子。我们可以使用Python中的requests和BeautifulSoup库来实现。
具体步骤如下:
- 通过requests库向目标网站发送请求,用BeautifulSoup库解析网页内容。
- 在BeautifulSoup对象中找到我们需要的电影信息,包括电影名称、导演、主演、评分、年份和标签等。
- 将这些信息存储到本地文件或者数据库中。
下面是Python代码实现:
import requests
from bs4 import BeautifulSoup
import csv
# 豆瓣电影Top250的URL
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/58.0.3029.110 Safari/537.3'}
# 获取页面内容
response = requests.get(url, headers=headers)
content = response.content
# 创建BeautifulSoup对象,解析网页内容
soup = BeautifulSoup(content, 'html.parser')
list_containers = soup.find_all('div', {'class': 'item'})
# 创建用于存储数据的列表
data_list = []
# 遍历每个电影信息
for movie_container in list_containers:
# 提取电影名
movie_name = movie_container.find('span', {'class': 'title'}).get_text()
# 提取导演、主演、分数、评价人数、标签和年份
info_tag = movie_container.find('p', {'class': ''})
movie_info = info_tag.get_text().strip()
# 分离出导演、主演、年份等信息
info_list = movie_info.split('\n')
director = info_list[0][4:]
actors = info_list[1][3:] if len(info_list) > 2 else ''
year = info_list[-2][:-1]
genre = info_list[-1].strip()
# 提取评分信息
rating_num_tag = movie_container.find('span', {'class': 'rating_num'})
rating_num = rating_num_tag.get_text()
# 提取评价人数信息
comment_num_tag = movie_container.find('div', {'class': 'star'})
comment_num = comment_num_tag.find_all('span')[-1].get_text()[:-3]
# 将数据添加到列表中
data_list.append([movie_name, director, actors, rating_num, comment_num, year, genre])
# 将数据写入CSV文件中
with open('douban_top250.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(['电影名称', '导演', '主演', '评分', '评价人数', '年份', '电影类型'])
writer.writerows(data_list)
上述代码可以让我们爬取豆瓣电影Top250,将相关信息存入CSV文件当中。
三、爬取豆瓣电影Top250参考文献
下面列出了一些关于爬取豆瓣电影Top250的参考文献:
- Python网络爬虫实战:实例讲解,方滨兴,电子工业出版社
- Python3网络爬虫开发实战,崔庆才,电子工业出版社
- Python网络爬虫:核心技术与实战,胡松涛,机械工业出版社
- BeautifulSoup官网文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
- Requests官网文档:https://requests.readthedocs.io/en/master/
四、Scrapy爬取豆瓣电影Top250
如果使用Scrapy框架来爬取豆瓣电影Top250,我们需要做以下几个步骤:
- 创建一个Scrapy项目,并创建一个用于存储数据的Item。
- 定义爬虫规则,编写爬虫程序。
- 编写数据的解析规则。
- 将数据存储到本地文件或者数据库中。
我们可以使用Scrapy shell来帮助我们测试我们的数据解析规则。
下面是Scrapy爬取豆瓣电影Top250的代码实现:
import scrapy
from scrapy.selector import Selector
from douban_top250.items import DoubanTop250Item
class DoubanTop250Spider(scrapy.Spider):
name = "douban_top250"
allowed_domains = ["douban.com"]
start_urls = ["https://movie.douban.com/top250"]
def parse(self, response):
sel = Selector(response)
sites = sel.xpath('//div[@class="item"]')
items = []
for site in sites:
# 创建Item对象
item = DoubanTop250Item()
item['movie_name'] = site.xpath('div[@class="pic"]/a/img/@alt').extract_first()
item['director'] = site.xpath('div[@class="info"]/div[@class="bd"]/p/text()').re('.*导演:(.*)?主演.*')[0].strip()
item['actors'] = site.xpath('div[@class="info"]/div[@class="bd"]/p/text()').re('.*主演:(.*)?(\s.*[0-9]{4})')[0].strip()
item['rating_num'] = site.xpath('div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first()
item['comment_num'] = site.xpath('div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[last()]/text()').extract_first().strip()[:-3]
item['year'] = site.xpath('div[@class="info"]/div[@class="bd"]/p[@class=""]/text()').re('.*([0-9]{4}).*')[0]
item['genre'] = site.xpath('div[@class="info"]/div[@class="bd"]/p[@class=""]/span[@class="genre"]/text()').extract_first().strip()
items.append(item)
return items
上述代码爬取豆瓣电影Top250,将对应的信息存储到DoubanTop250Item中。
五、爬取豆瓣Top250电影
如果我们想要获取豆瓣电影Top250的电影名称,我们可以使用BeautifulSoup库来实现。
下面是Python代码实现:
import requests
from bs4 import BeautifulSoup
# 豆瓣电影Top250的URL
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/58.0.3029.110 Safari/537.3'}
# 获取页面内容
response = requests.get(url, headers=headers)
content = response.content
# 创建BeautifulSoup对象,解析网页内容
soup = BeautifulSoup(content, 'html.parser')
list_containers = soup.find_all('div', {'class': 'item'})
# 遍历每个电影信息
for movie_container in list_containers:
# 提取电影名
movie_name = movie_container.find('span', {'class': 'title'}).get_text()
print(movie_name)
上述代码可以让我们获取豆瓣电影Top250的所有电影名称。
六、豆瓣电影Top250完整版
豆瓣电影Top250完整版可以在豆瓣电影的官网上找到。
URL: https://movie.douban.com/top250?start=0&filter=
注意:豆瓣电影Top250的完整版有多页,我们需要对每一页进行爬取。每页URL的参数start的取值范围是从0到225,间隔为25。
下面是Python代码实现:
import requests
from bs4 import BeautifulSoup
import csv
# 循环遍历所有页面
for i in range(0, 250, 25):
# 豆瓣电影Top250的URL
url = 'https://movie.douban.com/top250?start={}&filter='.format(i)
# 请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/58.0.3029.110 Safari/537.3'}
# 获取页面内容
response = requests.get(url, headers=headers)
content = response.content
# 创建BeautifulSoup对象,解析网页内容
soup = BeautifulSoup(content, 'html.parser')
list_containers = soup.find_all('div', {'class': 'item'})
# 创建用于存储数据的列表
data_list = []
# 遍历每个电影信息
for movie_container in list_containers:
# 提取电影名
movie_name = movie_container.find('span', {'class': 'title'}).get_text()
# 提取导演、主演、分数、评价人数、标签和年份
info_tag = movie_container.find('p', {'class': ''})
movie_info = info_tag.get_text().strip()
# 分离出导演、主演、年份等信息
info_list = movie_info.split('\n')
director = info_list[0][4:]
actors = info_list[1][3:] if len(info_list) > 2 else ''
year = info_list[-2][:-1]
genre = info_list[-1].strip()
# 提取评分信息
rating_num_tag = movie_container.find('span', {'class': 'rating_num'})
rating_num = rating_num_tag.get_text()
# 提取评价人数信息
comment_num_tag = movie_container.find('div', {'class': 'star'})
comment_num = comment_num_tag.find_all('span')[-1].get_text()[:-3]
# 将数据添加到列表中
data_list.append([movie_name, director, actors, rating_num, comment_num, year, genre])
# 将数据写入CSV文件中
with open('douban_top250.csv', 'a', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
if i == 0:
writer.writerow(['电影名称', '导演', '主演', '评分', '评价人数', '年份', '电影类型'])
writer.writerows(data_list)
上述代码可以让我们爬取豆瓣电影Top250完整版。
七、爬取豆瓣电影Top250的实验报告
对于豆瓣电影Top250的实验报告,我们可以结合上述多个方面,进行实际操作,收集数据,并进行