python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...
原创技术公众号:bigsai
前言
在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块、工具知识的使用。然而我所在的组刚好遇到的是python爬虫的小课题。
心想这不是很简单嘛,搞啥呢?想着去搞新的时间精力可能不太够,索性自己就把豆瓣电影的评论(短评)搞一搞吧。
之前有写过哪吒那篇类似的,但今天这篇要写的像姨母般详细。本篇主要实现的是对任意一部电影短评(热门)的抓取以及可视化分析。 也就是你只要提供链接和一些基本信息,他就可以
分析
对于豆瓣爬虫,what shold we 考虑?怎么分析呢?豆瓣电影首页
这个首先的话尝试就可以啦,打开任意一部电影,这里以姜子牙为例。打开姜子牙你就会发现它是非动态渲染的页面,也就是传统的渲染方式,直接请求这个url即可获取数据。但是翻着翻着页面你就会发现:未登录用户只能访问优先的界面,登录的用户才能有权限去访问后面的页面。
所以这个流程应该是 登录——> 爬虫——>存储——>可视化分析。
这里提一下环境和所需要的安装装,环境为python3,代码在win和linux可成功跑,如果mac和linux不能跑友字体乱码问题还请私我。其中pip用到包如下,直接用清华 镜像下载不然很慢很慢(够贴心不)。pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install xlwt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
登录
进去后有个密码登录栏,我们要分析在登录的途中发生了啥,打开F12控制台是不够的,我们还要使用Fidder抓包。
打开F12控制台然后点击登录,多次试探之后发现登录接口也很简单:
查看请求的参数发现就是普通请求,无加密,当然这里可以用fidder进行抓包,这里我简单测试了一下用错误密码进行测试。如果失败的小伙伴可以尝试手动登陆再退出这样再跑程序。
这样编写登录模块的代码:url='https://accounts.douban.com/j/mobile/login/basic'
header={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony',
'Origin': 'https://accounts.douban.com',
'content-Type':'application/x-www-form-urlencoded',
'x-requested-with':'XMLHttpRequest',
'accept':'application/json',
'accept-encoding':'gzip, deflate, br',
'accept-language':'zh-CN,zh;q=0.9',
'connection': 'keep-alive'
,'Host': 'accounts.douban.com'
}
data={
'ck':'',
'name':'',
'password':'',
'remember':'false',
'ticket':''
}
def login(username,password):
global data
data['name']=username
data['password']=password
data=urllib.parse.urlencode(data)
print(data)
req=requests.post(url,headers=header,data=data,verify=False)
cookies = requests.utils.dict_from_cookiejar(req.cookies)
print(cookies)
return cookies
这块高清之后,整个执行流程大概为:
爬取
成功登录之后,我们就可以携带登录的信息访问网站为所欲为的爬取信息了。虽然它是传统交互方式,但是每当你切换页面时候会发现有个ajax请求。
这部分接口我们可以直接拿到评论部分的数据,就不需要请求整个页面然后提取这部分的内容了。而这部分的url规律和之前分析的也是一样,只有一个start表示当前的条数在变化,所以直接拼凑url就行。
也就是用逻辑拼凑url一直到不能正确操作为止。https://movie.douban.com/subject/25907124/comments?percent_type=&start=0&其他参数省略
https://movie.douban.com/subject/25907124/comments?percent_type=&start=20&其他参数省略
https://movie.douban.com/subject/25907124/comments?percent_type=&start=40&其他参数省略
对于每个url访问之后如何提取信息呢?
我们根据css选择器进行筛选数据,因为每个评论他们的样式相同,在html中就很像一个列表中的元素一样。
再观察我们刚刚那个ajax接口返回的数据刚好是下面红色区域块,所以我们直接根据class搜素分成若干小组进行曹祖就可以。
在具体的实现上,我们使用requests发送请求获取结果,使用BeautifulSoup去解析html格式文件。
而我们所需要的数据也很容易分析对应部分。
实现的代码为:import requests
from bs4 import BeautifulSoup
url='https://movie.douban.com/subject/25907124/comments?percent_type=&start=0&limit=20&status=P&sort=new_score&comments_only=1&ck=C7di'
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}
req = requests.get(url,headers=header,verify=False)
res = req.json() # 返回的结果是一个json
res = res['html']
soup = BeautifulSoup(res, 'lxml')
node = soup.select('.comment-item')
for va in node:
name = va.a.get('title')
star = va.select_one('.comment-info').select('span')[1].get('class')[0][-2]
comment = va.select_one('.short').text
votes=va.select_one('.votes').text
print(name, star,votes, comment)
这个测试的执行结果为:
储存
数据爬取完就要考虑存储,我们将数据储存到cvs中。
使用xlwt将数据写入excel文件中,xlwt基本应用实例:import xlwt
#创建可写的workbook对象
workbook = xlwt.Workbook(encoding='utf-8')
#创建工作表sheet
worksheet = workbook.add_sheet('sheet1')
#往表中写内容,第一个参数 行,第二个参数列,第三个参数内容
worksheet.write(0, 0, 'bigsai')
#保存表为test.xlsx
workbook.save('test.xlsx')
使用xlrd读取excel文件中,本案例xlrd基本应用实例:import xlrd
#读取名称为test.xls文件
workbook = xlrd.open_workbook('test.xls')
# 获取第一张表
table = workbook.sheets()[0] # 打开第1张表
# 每一行是个元组
nrows = table.nrows
for i in range(nrows):
print(table.row_values(i))#输出每一行
到这里,我们对登录模块+爬取模块+存储模块就可把数据存到本地了,具体整合的代码为:import requests
from bs4 import BeautifulSoup
import urllib.parse
import xlwt
import xlrd
# 账号密码
def login(username, password):
url = 'https://accounts.douban.com/j/mobile/login/basic'
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony',
'Origin': 'https://accounts.douban.com',
'content-Type': 'application/x-www-form-urlencoded',
'x-requested-with': 'XMLHttpRequest',
'accept': 'application/json',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'connection': 'keep-alive'
, 'Host': 'accounts.douban.com'
}
# 登陆需要携带的参数
data = {
'ck' : '',
'name': '',
'password': '',
'remember': 'false',
'ticket': ''
}
data['name'] = username
data['password'] = password
data = urllib.parse.urlencode(data)
print(data)
req = requests.post(url, headers=header, data=data, verify=False)
cookies = requests.utils.dict_from_cookiejar(req.cookies)
print(cookies)
return cookies
def getcomment(cookies, mvid): # 参数为登录成功的cookies(后台可通过cookies识别用户,电影的id)
start = 0
w = xlwt.Workbook(encoding='ascii') # #创建可写的workbook对象
ws = w.add_sheet('sheet1') # 创建工作表sheet
index = 1 # 表示行的意思,在xls文件中写入对应的行数
while True:
# 模拟浏览器头发送请求
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}
# try catch 尝试,一旦有错误说明执行完成,没错误继续进行
try:
# 拼凑url 每次star加20
url = 'https://movie.douban.com/subject/' + str(mvid) + '/comments?start=' + str(
start) + '&limit=20&sort=new_score&status=P&comments_only=1'
start += 20
# 发送请求
req = requests.get(url, cookies=cookies, headers=header)
# 返回的结果是个json字符串 通过req.json()方法获取数据
res = req.json()
res = res['html'] # 需要的数据在`html`键下
soup = BeautifulSoup(res, 'lxml') # 把这个结构化html创建一个BeautifulSoup对象用来提取信息
node = soup.select('.comment-item') # 每组class 均为comment-item 这样分成20条记录(每个url有20个评论)
for va in node: # 遍历评论
name = va.a.get('title') # 获取评论者名称
star = va.select_one('.comment-info').select('span')[1].get('class')[0][-2] # 星数好评
votes = va.select_one('.votes').text # 投票数
comment = va.select_one('.short').text # 评论文本
print(name, star, votes, comment)
ws.write(index, 0, index) # 第index行,第0列写入 index
ws.write(index, 1, name) # 第index行,第1列写入 评论者
ws.write(index, 2, star) # 第index行,第2列写入 评星
ws.write(index, 3, votes) # 第index行,第3列写入 投票数
ws.write(index, 4, comment) # 第index行,第4列写入 评论内容
index += 1
except Exception as e: # 有异常退出
print(e)
break
w.save('test.xls') # 保存为test.xls文件
if __name__ == '__main__':
username = input('输入账号:')
password = input('输入密码:')
cookies = login(username, password)
mvid = input('电影的id为:')
getcomment(cookies, mvid)
执行之后成功存储数据:
可视化分析
我们要对评分进行统计、词频统计。还有就是生成词云展示。而对应的就是matplotlib、WordCloud库。
实现的逻辑思路:读取xls的文件,将评论使用分词处理统计词频,统计出现最多的词语制作成直方图和词语。将评星
python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...相关推荐
- python爬虫豆瓣评论实验报告_豆瓣爬虫实践-python版
豆瓣登录,无验证码版: import requests #starturl = "https://www.douban.com/accounts/login" loginurl = ...
- python链表和树实验报告_关于Python实现树结构和链表结构的一点想法
关于Python实现树结构和链表结构的一点想法 Python由于内置的数据结构具有很高的灵活性,所以可以用很多种方式来构建树.图.链表等结构 1. 树的Python实现 python自然可以使用cla ...
- python学生成绩管理系统实验报告_【python 学生信息管理系统】
1. 简述 本文讲述的是用 python 语言写一个简单的学生信息管理系统,系统包含学生信息的增删查改功.同时使用了 mysql5.7.14 来存储数据. 2.准备工作 首先,先搭建好自己的 MySQ ...
- Python使用网络抓包的方式,利用超级鹰平台识别验证码登录爬取古诗文网、上篇--识别验证码
Python使用网络抓包的方式,利用超级鹰平台识别验证码登录,<爬取古诗文网>. 上篇–识别验证码 序言: 哈喽,各位小可爱们,我又来了,这次我新学习到的内容是python爬虫识别验证码. ...
- python爬虫实训实验报告_用Pycharm进行scrapy爬虫的实验报告
1. 实验内容 使用Pycharm写代码,采用scrapy爬取红袖小说网前十页的作品信息. 2. 试验环境 操作系统:window10 家庭版64位操作系统 Python版本:python 3.7.3 ...
- python链表和树实验报告_数据结构树和森林实验报告
_ 树和森林应用实验 实验报告 实验目的 ( 1) 掌握树和森林的二叉链表表示方法. (2) 掌握树和二叉树的结构及算法之间的对应关系. (3) 掌握树的两种遍历算法及其应用. 实验运行环境 Visu ...
- python数据分析实验报告_用Python处理实验数据
开篇语 近来忙于考试以及应付专业课,基本很少写简书了.昨晚攻坚了三个学生工作的任务(妈妈的吻.好久没有这么疯狂工作了.还是很爽的哦!) 只恨这张图没有标记时间,其实已经是十二点四十多了 今天难得清静, ...
- python名片管理器实验报告_名片管理系统——实验报告.doc
名片管理系统--实验报告 网上名片管理系统 数据库和表的建立:(在MySQL中创建数据库test,并在test数据库中建立card.user和recycle表格,其中card和recycle具有相同的 ...
- python贪吃蛇的实验报告_贪吃蛇游戏课程设计实验报告
DOC 可编辑修改 -------- 为你整理各种最新最全办公范文 -------- 双击可以删除 爱心 --- 用心 --- 恒心 贪吃蛇游戏课程设计实验报告 辽 宁 科 技 大 学 课程设计说明书 ...
最新文章
- 采购AI/ML安全工具前要先回答这11个问题
- 5000量子比特的商用计算平台发布!D-Wave:这是商业应用的唯一选择
- SQL server 行转列 列转行
- 数据仓库与数据集市建模
- Bluetooth LE(低功耗蓝牙) - 第五部分
- PyTorch Hub发布!一行代码调用最潮模型,图灵奖得主强推
- Android中的HTTP请求
- windows 编译 caffe unresolved externals 问题
- xshell调出oracle安装界面,XShell+Xmanager实现在XShell中显示远程服务器的图形界面
- 工具资源 Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
- 【算法系列之十二】最接近的三数之和
- java 数组 length 减少_java中数组有没有length()方法?string没有lenght()方法?
- android用户界面编程技巧——更新请求
- 多终端同时登录_So easy!同时登陆两个或多个Mac版微信和QQ
- maven netty 配置_使用Springboot整合开发Netty(一个表白的小案例)
- 五分钟学会python_关于五分钟学Python系列视频
- 50秒开门,3分钟开走,特斯拉Model S就这样不翼而飞
- [渝粤教育] 中国地质大学 大学英语(3) 复习题
- C# 监控字段_资产运营专业线升级公告(资源、物业、运维监控)
- 理解softmax函数
热门文章
- 【报告分享】 美妆行业营销报告-从“她经济”到“TA经济“-WEIQ(附下载)
- 探究如何计算哈希表查找成功、失败时的平均查找长度(附实例)
- 5天学会Linux(实操练手+最全教程) Day1 环境搭建
- 论文解读:High Dynamic Range and Super-Resolution from Raw Image Bursts
- unity3D烟花制作-来放烟花吧!
- 东北狼仙-织梦仿站获取网站的iconfont字体图标字体方法
- 昆仑通态mcp怎么转化成mce文件_昆仑通泰McgsPro组态软件与MCGSE组态环境对比的升级更新说明...
- SVM支持向量机-软间隔与松弛因子(3)
- 自动控制原理总结 转载
- PeToUSB-——实战卡巴斯基杀毒U盘启动盘