写在前面: 首次写csdn的博客, 记录一次涉及爬虫, 中文词句情感分析, 数据可视化的社会计算作业, 不过仅涉及非常粗浅的介绍和本次作业中用到的内容, 会在每个板块最后附上相应内容学习的其他博客链接.
分析题意
对于2019年度的电影评分数据,电影描述以及标签信息等数据进行获取和分析,作一份电影分析报告。
要求内容:
1. 正面,负面,中性评价比率
2. 粉丝分布属性
3. 票房属性
完成作业大概分为三个板块:
- 获取豆瓣上的电影数据
1.爬虫的基础知识
2.BeautifulSoup库的使用 - 分析数据(情感分析)
1.python对excel的操作
2.中文情感分析snowNLP库的使用 - 可视化表示数据
1.excel的图表操作
2.python的matplotlib库画三维散点图
本篇博客只涉及到第一板块的内容,后面内容将在后两篇文章中
基础知识
1.爬虫 : 此处的爬虫仅需要涉及到以下内容:
- 用requests库获取网页源代码
cookie = '这里填你的cookie'
user-agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
#这里的user-agent建议就用这个
headers = {"user-agent" : user-agent,"Cookie":cookie}
url = 'https://www.baidu.com'
response = requests.get(url,headers)
response = response.text
print(response)
此处的headers内容在此处作业中非常必要, 否则豆瓣会拒绝我们的请求, 返回无用的信息.
点击"爬虫详细教学"学习更多爬虫相关内容
2.BeautifulSoup库 : 匹配需要的内容:
BeautifulSoup库可以对python爬下来的html页面进行解析和美化. 此处只需要几个简单函数就可以提取到所需要的信息.
from bs4 import BeautifulSoup
#调用bs库
soup = BeautifulSoup(response,"html.parser")z
#这个函数可以解析得到的html文件
soup.find_all('tag',class_='巴拉巴拉')
#这个可以找到所有tag标签中类是巴拉巴拉的信息
soup.a 可以输出soup中标签为a的项
soup.a.string可以输出项的文本,但是遇到换行就只能读取第一行
在文本有换行时,用soup.a.text可以得到所有的文本
soup.a.attrs['class']得到class的值
接下来我们举个小例子
图片是豆瓣的短评页爬取到的内容的一个评论信息块
假设这段html代码我们已经用以文本形式存储在了变量response中.
soup = BeautifulSoup(response,“html.parser”)
这个语句将文本解析成beautifulsoup的格式
a = soup.find_all(‘span’)
此时的a是一个列表,内部存有每个span标签
soup = BeautifulSoup(response,"html.parser")
a = soup.find_all('span')
for i in a:
print(i)
print("=============")
列表中的每一个都可以直接调用 . 此处我们需要的是其中的评论内容和用户的个人主页链接 . 我们要怎么得到他们呢:
- 评论内容:
1.显然我们看到评论内容在列表中的最后一个,采用a[-1].text就能得到
2.或者我们发现其实他有class是short,那么我们在找的时候其实可以直接用
a = soup.find_all(‘span’,class_=‘short’)
a[0].text
得到评论的内容
请注意这里的a[0],因为find_all返回的是列表
请注意这里的class_,因为class是保留字,所以一定要加个下划线以示区分.
soup = BeautifulSoup(response,"html.parser")
a = soup.find_all('span')
print(a[-1].text)
a2 = soup.find_all('span',class_='short')
print(a2[0].text)
- 个人主页链接:
观察得到:链接是一个a标签内的href属性,所以我们先定位到comment-info的位置,再直接调用即可
m = soup.find(‘span’,class_=‘comment-info’)
m.a.attrs[‘href’]
就可以得到链接
soup = BeautifulSoup(response,"html.parser")
m = soup.find('span',class_='comment-info')
print(m.a.attrs['href'])
点击"BeautifulSoup博客"获取更多相关内容
以上就是一些基础知识的内容,回到我们这次的任务中,要爬取豆瓣的电影评论,由于豆瓣的权限规则,只有登录后才能爬取一些内容 , 所以这里我们需要模拟登录状态,我们需要在headers里添加自己的登录后的cookie.
话不多说 , 搞起来
获取cookie非常简单,只需要
1.登录后打开你的豆瓣
2.右键打开检查
3.点击图中的 network
4.CTRL + R刷新网页
5.如图示点击1,2,3,找到4就是我们要的cookie
6.将cookie复制进去到python的cookie时注意用单引号而不是双引号.
作业中要求2019年总的电影的数据分析,我们需要较多的电影数据(图中为爬取得到的总信息)
我们在分类页进行爬取
2019年豆瓣电影链接
但是我们查看网页源代码并没有找到我们要的信息, 幸运的是在抓包时我们找到了他请求电影信息的真实网址
右键检查–network–刷新页面–XHR-找到一个数据包–header-request_url
点开网址发现里面的内容非常nice
真实请求网址
这其实是一个json类型,用json类型的方式提取我们要的数据就行了,同时注意到
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start=0&year_range=2019,2019
此处的start=0,可以修改为start=20来模拟点击下一页
更妙的是:
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start=0&limit=500&year_range=2019,2019
由于在其他网址看到过limit控制数量,此处尝试发现也可以,于是直接获得500部电影的数据,稍加处理即可.
python读写excel的操作会在下一篇文章中介绍
第一次写博客,请轻喷555555