基于BeautifulSoup爬取豆瓣网上的电影信息

本文介绍了如何利用Python的BeautifulSoup库爬取豆瓣网上的电影信息,详细阐述了BeautifulSoup的简洁特性,并提供了爬虫程序的实现步骤。
摘要由CSDN通过智能技术生成

基于BeautifulSoup实现爬取豆瓣网上的电影信息

这些天在学习Python,了解到用Python做网页网页爬虫非常的方便,于是琢磨着写了一个简单的爬虫程序(感谢万能的beautifulSoup框架,ps:做网页解析太方便了)。当然这是计划中的一部分,说来话长,一开始本来想做一个电影推荐系统(当然和豆瓣的推荐系统不太一样),传统的推荐系统是利用基于一种统计的方法,利用观众对电影的评分进行统计学处理找到合适的电影推荐个用户(涉及协作型过滤,搜集偏好,相似度评价等过程);但是这是一种“大多数说好,就是好的”推荐方法。我想做的是一种主动式的推荐方法:利用对电影的理解(包括电影分格、剧情、演员等要素)对电影本身进行相似度计算,例如一个用户喜欢看《康熙王朝》,康熙王朝的剧情是讲述了一代圣君康熙从登记到归天所做的丰功伟绩,根据对剧情的分析,相类似的还有《汉武大帝》,《成吉思汗》,《雍正王朝》等电视剧,当然豆瓣推荐也能达到这种效果(在豆瓣主页上输入一个电影名字以后,出现的网页下面会有一栏“喜欢这部电影的人也喜欢......”),推荐本质是不一样的,我设想的方法更多的是对剧情的理解,来找相关的电影,更多涉及的技术难点是对自然语言语义的理解、相似度分析,而不是基于大多数人的“共同爱好”来进行推荐。万里长城还是得一步一步的走,先爬下来网页数据才是首要任务。
先说下我的网页爬虫实现的功能:可以根据豆瓣网上的不用电影分类进行单独的爬取,在程序中,我爬取了电影的名字、电影的评分、以及评论该电影的观众的数量三个数据,并且可以设置爬取的电影的数据的量(当然理论上是可以无限制的爬取豆瓣上的所有电影)。
**接下来的内容将分两部分介绍:**
            1. BeautifulSoup简单介绍
            2. Python爬虫的实现

一、BeautifulSoup简洁

简单来说,BeautifulSoup是python的一个库,最主要的功能室从网页上解析数据,官方的解释如下:
  **Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。**  
[当然,如果想要系统学习的话,还是去查看官方文档,写的特别详细,而且有详细的实例,可以快速入门。](https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html)
在我的爬虫程序中,其实主要用的解析函数只有一个,即find_all()函数,如下实例:
#网页源码:
# <html>
#  <head>
#   <title>
以下是基于 Python 爬取豆瓣电影信息并进行可视化的代码示例: ```python import requests import pandas as pd import matplotlib.pyplot as plt # 爬取豆瓣电影Top250信息 url = 'https://movie.douban.com/top250' movies = [] for i in range(10): res = requests.get(url, params={'start': i * 25, 'filter': ''}) res.encoding = 'utf-8' soup = BeautifulSoup(res.text, 'html.parser') for movie in soup.select('.item'): title = movie.select('.title')[0].text rating_num = movie.select('.rating_num')[0].text comment_num = movie.select('.star span')[3].text[:-3] movies.append({'title': title, 'rating_num': rating_num, 'comment_num': comment_num}) # 将数据存入 DataFrame 中 df = pd.DataFrame(movies) # 将评分和评论数转换为数字类型 df['rating_num'] = pd.to_numeric(df['rating_num']) df['comment_num'] = pd.to_numeric(df['comment_num']) # 对电影进行分类统计 rating_counts = df.groupby(pd.cut(df['rating_num'], bins=[0, 4, 6, 7, 8, 9, 10])).size() comment_counts = df.groupby(pd.cut(df['comment_num'], bins=[0, 100, 200, 300, 400, 500, 1000, 2000, 5000])).size() # 绘制评分和评论数的柱状图 fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 6)) rating_counts.plot(kind='bar', ax=ax[0]) ax[0].set_xlabel('Rating') ax[0].set_ylabel('Count') ax[0].set_title('Rating Counts') comment_counts.plot(kind='bar', ax=ax[1]) ax[1].set_xlabel('Comment') ax[1].set_ylabel('Count') ax[1].set_title('Comment Counts') plt.tight_layout() plt.show() ``` 在这个示例中,我们使用 Requests 库爬取豆瓣电影 Top250 的信息,并使用 BeautifulSoup 库进行 HTML 解析。然后,我们将电影的标题、评分和评论数存入一个字典列表中,并将其转换为 Pandas 的 DataFrame。接着,我们对评分和评论数进行分类统计,并使用 Matplotlib 库绘制柱状图。最终,我们得到了豆瓣电影 Top250 的评分和评论数的分布情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值