前言

在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块、工具知识的使用。然而我所在的组刚好遇到的是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爬取豆瓣短评,这是我见过最牛逼的教程!相关推荐

  1. scrapy mysql 豆瓣_利用Scrapy爬取豆瓣图书并保存至Mysql数据库

    Scrapy是一个纯Python语言写的爬虫框架,本次用它来爬取豆瓣图书的数据. 准备工作 没有安装Scrapy的同学需要安装一下,有两种方式安装: 安装了Anaconda的同学直接在命令行输入con ...

  2. 朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...

    豆瓣影评 一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接 ...

  3. python爬虫豆瓣电影评价_使用爬虫爬取豆瓣电影影评数据Python版

    在 使用爬虫爬取豆瓣电影影评数据Java版 一文中已详细讲解了爬虫的实现细节,本篇仅为展示Python版本爬虫实现,所以直接上代码 完整代码 爬虫主程序 # 爬虫启动入口 from C02.data ...

  4. python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...

    def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...

  5. python爬取豆瓣电影top250_Python爬虫——爬取豆瓣电影Top250代码实例

    利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Excel表中 ...

  6. python爬豆瓣电视剧_Python3.5爬取豆瓣电视剧数据并且同步到mysql中

    #!/usr/local/bin/python#-*- coding: utf-8 -*-#Python: 3.5#Author: zhenghai.zhang@xxx.com#Program: 爬取 ...

  7. python爬取豆瓣图书top250_「豆瓣读书250」爬取豆瓣TOP250书单 - seo实验室

    豆瓣读书250 小白学习爬虫 爬取豆瓣TOP250的书,正好本人也喜欢看书 思路分析: https://book.douban.com/top250这是TOP250第一页的链接 https://boo ...

  8. python自动翻译导学案_变量python学案

    ●掌握常用的关系和逻辑运算符 ●掌握 Python 中的变量及其赋值 ●数字化学习与...●学生任务二: 阅读学案,计算一下表达式的值,把结果填在学习网站上. 练习算术...... 初中八年级信息技术 ...

  9. Python项目之我的第一个爬虫----爬取豆瓣图书网,统计图书数量

    今天,花了一个晚上的时间边学边做,搞出了我的第一个爬虫.学习Python有两个月了,期间断断续续,但是始终放弃,今天搞了一个小项目,有种丰收的喜悦.废话不说了,直接附上我的全部代码. 1 # -*- ...

  10. 【Python 爬虫】(二)使用 Requests 爬取豆瓣短评

    文章目录 Requests库介绍 Requests库安装 Requests库的简单用法 实战 爬虫协议 Requests库介绍 Requests库官方的介绍有这么一句话:Requests,唯一的一个非 ...

最新文章

  1. HTML数字比较大小游戏,Javascript 比较两个数大小并输出最大数
  2. 通过sessionid获取session php,php如何返回sessionID和如何通过sessionID获取相关的session...
  3. 【Vue】ElementUI el-select 下拉分页加载数据,并支持搜索功能(此处不支持分页)
  4. Android adb input 命令介绍
  5. linux终端vim底行模式点冒号,Vim基本使用方法
  6. javascript 之 面向对象【理解对象】
  7. 第三次学JAVA再学不好就吃翔(part41)--修饰符
  8. $.ajax data怎么处理_AJAX
  9. Spring学习总结(28)——Spring获取request对象的几种方法及线程安全性总结
  10. JAVA学习day10
  11. 已知两点坐标和三边长度,求三角形第三点的坐标
  12. Sentaurus TCAD模型创建、激活电极等
  13. 大学C语言学习笔记(C语言程序设计第五版——谭浩强,翁凯C语言基础教程)基础、算法、程序结构、数组、函数、指针、枚举、结构、联合
  14. 打开eclipse翻译错误值13 的解决办法
  15. 使用Tor绕过防火墙进行远程匿名访问
  16. 计算机系统:系统级I/O
  17. 和平精英为什么服务器显示错误,和平精英为什么会出现错误代码5567?_和平精英错误代码5567解决步骤一览...
  18. 【GIF图片】用PS生成背景透明的GIF图片出现帧叠加的现象
  19. java学生管理系统部分截图(八)
  20. 2022快手春节跳一跳红包到 怎么获得66元红包?

热门文章

  1. dataset中shuffle()、repeat()、batch()用法
  2. Egret引擎的EUI基础使用教程
  3. 转载:如何给公司取英文名字
  4. workman 是什么
  5. 2022JK工作室第二次招新赛题解
  6. redis为什么这么快
  7. 64位系统装32位mysql有问题吗_32位系统部署到64位下常见问题及解决
  8. 树莓派命令连接wifi_使用命令行设置树莓派的wifi网络
  9. 按照网络规模来分,服务器分为哪几类?
  10. 计算机主板品牌排行榜,电脑主板十大品牌排行榜