原创技术公众号:bigsai,本文在1024发布,回复bigsai送架构师进阶pdf资源,祝大家节日快乐,心想事成。收到祝福后点个一键三连回馈一下蟹蟹!

文章结构

  • 前言
  • 登录
  • 爬取
  • 储存
  • 可视化分析

前言

在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块、工具知识的使用。然而我所在的组刚好遇到的是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  datadata['name']=usernamedata['password']=passworddata=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').textvotes=va.select_one('.votes').textprint(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.parseimport 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'] = usernamedata['password'] = passworddata = 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 cookiesdef getcomment(cookies, mvid):  # 参数为登录成功的cookies(后台可通过cookies识别用户,电影的id)start = 0w = xlwt.Workbook(encoding='ascii')  # #创建可写的workbook对象ws = w.add_sheet('sheet1')  # 创建工作表sheetindex = 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加20url = '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列写入 indexws.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 += 1except Exception as e:  # 有异常退出print(e)breakw.save('test.xls')  # 保存为test.xls文件if __name__ == '__main__':username = input('输入账号:')password = input('输入密码:')cookies = login(username, password)mvid = input('电影的id为:')getcomment(cookies, mvid)

执行之后成功存储数据:

可视化分析

我们要对评分进行统计、词频统计。还有就是生成词云展示。而对应的就是matplotlibWordCloud库。

实现的逻辑思路:读取xls的文件,将评论使用分词处理统计词频,统计出现最多的词语制作成直方图和词语。将评星

用python写一个豆瓣通用爬虫并可视化分析相关推荐

  1. 用python实现一个豆瓣通用爬虫(登陆、爬取、可视化分析)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 主人下马客在船,举酒欲饮无管弦. ...

  2. 豆瓣用python写的网站_用python写一个豆瓣短评通用爬虫(登录、爬取、可视化)

    原创技术公众号:bigsai,本文在1024发布,祝大家节日快乐,心想事成. @ 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是 ...

  3. 用python写一个豆瓣短评通用爬虫(登录、爬取、可视化)!

    前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是python爬虫的小课题. 心想这不是很简单嘛,搞啥呢?想着去搞新的时间精力可能不 ...

  4. 用python写一个美女图片爬虫

    介绍 最近无聊学了一下python,决定打算用python写一个爬虫,既然要写爬虫,就写一个美女爬虫,养眼,哈哈..你们懂的 准备阶段 首先我们必须先找到一个有美女的网站,这里我以7kk网站为例子, ...

  5. 用Python写一个简单的双均线策略分析

    用Python写一个简单的双均线策略 双均线策略 先罗列一下我知道的量化策略: 双均线:一句话来讲就是金叉买死叉卖. 布林带:突破压力线(上轨)清仓,跌破支撑线(下轨)持仓. PEG:根据PE/G调整 ...

  6. 用python写一个简单的爬虫保存在json文件中

    学习python没多久,所以只能写一个很简单的爬虫啦~~ 我使用annacada 自带的spyder来写爬虫的,这次我们要爬取得网站是http://www.drugbank.ca/drugs, 主要是 ...

  7. 用python写一个简单的爬虫_用Python编写一个简单的爬虫

    作者信息: Author : 黄志成(小黄) 博客地址: 博客 呐,这是一篇福利教程.为什么这么说呢.我们要爬取的内容是美图网站(嘿嘿,老司机都懂的) 废话不多说.开始今天的表演. 这个图集网站不要问 ...

  8. python写一个简单的爬虫程序(爬取快手)(附源码)

    快手是一个有意思的视频应用,但是它有一些视频不让下载,我们今天就用爬虫来实现爬取不让下载的视频: 首先右键点击检查,我们可以看见找到了视频的src,访问这个src就可以得到视频的下载网址,如下: 右键 ...

  9. 用python写一个简单的爬虫_Python实现简易Web爬虫详解

    编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...

最新文章

  1. UE4制作程序背景游戏 Make a game with Procedural Backgrounds in UE4
  2. 详解音视频直播中的低延时
  3. 数据人必须会的技能,用手机查看数据报告真香
  4. 统计dataframe中所有列的null数量与填充null注意事项
  5. hive 如何将数组转成字符串_教你如何将Power Logic的原理图转成Orcad的原理图
  6. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化
  7. 跨浏览器实现等高栏 Equal Height Columns with Cross-Browser CSS
  8. FastDFS 学习笔记
  9. 确认!字节跳动 AI Lab 负责人马维英离职,将赴清华加入张亚勤团队
  10. 第六章节 三层架构(一. 三层架构的概述)
  11. 你还在因为数学对AI望而却步?看看这本秘籍吧
  12. autowired 静态方法使用_静态方法中调用Spring注入过程解析
  13. C#读写XML的演示程序(1)
  14. python yield from用法
  15. JDF的实质与走向(转)
  16. 同事通过接私活年入60W,他常用19个私活平台汇总!
  17. Number of unique ways that ATM can tender
  18. 无缝轮播图无缝轮播图
  19. Spring Cloud Gateway(十):网关过滤器工厂 GatewayFilterFactory
  20. windows下修改磁盘扇区数据

热门文章

  1. PKI/CA (2)核心说明
  2. Bitcoin代码中的Boost signals(1)
  3. 初识 java(简单易懂入门篇)
  4. linux kernel的spinlock代码导读和分析
  5. android 代码浏览,Webview实现android简单的浏览器实例代码
  6. 基于ncat的简易web服务器
  7. Ubuntu安装apt出现报错如何操作(简单记录)
  8. 私有句柄表(内核对象,并非用户对象),全局句柄表
  9. 160个Crackme032用ProcessMonitor拆解KeyFile保护
  10. sublime text 3170 破解工具