前言

前一段时间学校有个project,做一个电影购票系统,当时就用springboot做了系统,用python抓了一些电影的基本信息。后来发现如果把评论做成词云那展示起来不是很酷炫么。于是乎把这个过程分享记录下来。

  • 虽然不是什么高大上的技术,但是是自己做出来的词云,难免有些兴奋。
  • 所用到的库:
  • 爬虫:requests,pymysql存库。
  • 词云生成:wordcloud(词云),jieba(中文文本分词)。matplotlib(图片展示)

数据库

ciyun

SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for ciyun
-- ----------------------------
DROP TABLE IF EXISTS `ciyun`;
CREATE TABLE `ciyun` (`moviename` varchar(255) DEFAULT NULL,`id` int(11) DEFAULT NULL,`text` varchar(8000) CHARACTER SET utf8mb4 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

movie

SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for movie
-- ----------------------------
DROP TABLE IF EXISTS `movie`;
CREATE TABLE `movie` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`type` varchar(255) DEFAULT NULL,`time_long` int(20) DEFAULT NULL,`description` varchar(1500) DEFAULT NULL,`img` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=utf8mb4;

爬虫部分:

一个爬虫重在分析网页链接的关系和结构。我要爬取的是短评。
进入豆瓣电影选恐怖的界面分析每个电影下的属性:

  • 并且他的下拉还会有ajax返回数据(没有加密)


    找到这个界面进去链接你会发现:

    他的url是由规律的。进去你在看评论

在观看评论时候:

你会发现这个评论都在short类中,那么这样你就可以抓到够多的评论了。对于爬虫部分因为评论只是要抓取的一部分,那么就不具体介绍了。给出解析text页面的核心函数:

def gettext(url):req=requests.get(url)res=req.textsoup=BeautifulSoup(res,'lxml')commit=soup.select(".short")text=''for team in commit:text =team.text ' 'return text

同一个电影把text放到一块就可以。然后先存到数据库。(多个节点的工程我更喜欢分布实现。这样更稳定)

对于词云生成部分:
我的文本信息数据库(每一个text都很长很长)

完整核心代码为:
douban

import requests
from bs4 import BeautifulSoup
import pymysql
import time
db = pymysql.connect(host="localhost", user="root",password="123456", db="project", port=3306)
# 使用cursor()方法获取操作游标
cur = db.cursor()
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}url1="https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%8A%A8%E4%BD%9C&sort=time&page_limit=20&page_start=0"
req=requests.get(url=url1)
res=req.json()
a=res['subjects']
def judmovie(url,name,imgurl,id):req=requests.get(url,headers=header)res=req.textsoup=BeautifulSoup(res,"lxml")timelong=soup.find(attrs={'property':'v:runtime'}).texttimelong=str(timelong).replace('分钟','')introduction = soup.find(attrs={'property': 'v:summary'}).textintroduction = str(introduction).replace(' ', '')print(timelong,introduction)# sql="insert into movie(name,type,time_long,description,img)values('%s','action','%d','%s','%s')"%(name,int(timelong),introduction,imgurl)# try:#     cur.execute(sql)#     db.commit()# except Exception as e:#     print(e)#     db.rollback()# sql2="insert into ciyun(moviename,id)values('%s','%s')"%(name,id)# try:#     cur.execute(sql2)#     db.commit()# except Exception as e:#     print(e)#     db.rollback()for team in a:#print(team)id=team['id']img=team['cover']url=team['url']name=str(team['title']).replace(' ','')print(id,name,img,url)try:judmovie(url,name,img,id)time.sleep(1)except Exception as  e:print(e)#judmovie("https://movie.douban.com/subject/30228425/?tag=%E6%81%90%E6%80%96&from=gaia",'fds','jj')

gettext:

import requests
from bs4 import BeautifulSoup
import time
import pymysql
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}db = pymysql.connect(host="localhost", user="root",password="123456", db="project", port=3306)
# 使用cursor()方法获取操作游标
cur = db.cursor()
def gettext(url):req=requests.get(url)res=req.textsoup=BeautifulSoup(res,'lxml')commit=soup.select(".short")text=''for team in commit:text+=team.text+' 'return text
sql="select * from ciyun"
cur.execute(sql)
valuelist=cur.fetchall()
for value in valuelist:time.sleep(0.4)try:name=value[0]id=value[2]url1="https://movie.douban.com/subject/"+str(id)+"/comments?start=0&limit=20&sort=new_score&status=P"url2 = "https://movie.douban.com/subject/" + str(id) + "/comments?start=20&limit=20&sort=new_score&status=P"tex1=gettext(url1)tex2=gettext(url2)tex1+=tex2print(1,tex1)sql ="update ciyun set text='%s' where id='%s'"%(tex1,id)cur.execute(sql)db.commit()except Exception as e:print(e)
gettext("https://movie.douban.com/subject/30228425/comments?status=P")

词云效果为:

插入到网页中:

项目github地址

  • 如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai

python豆瓣爬虫爬取评论做成词云相关推荐

  1. Python动态爬虫爬取京东商品评论

    Python 动态爬虫爬取京东商品评论 1. 概述 京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法. 动态爬虫 ...

  2. python制作爬虫爬取京东商品评论教程

    python制作爬虫爬取京东商品评论教程 作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计 ...

  3. Python:网络爬虫爬取某表情包网站

    Python:网络爬虫爬取某表情包网站 参考: 爬虫基础知识点汇总(html文件基础和4个常用库 超级详细长文预警) [爬虫教程]吐血整理,最详细的爬虫入门教程~ HTML的简单介绍 HTML的全称为 ...

  4. python编写爬虫爬取先知社区文章

    python编写爬虫爬取先知社区文章的标题.标题链接.作者.作者链接.文章分类.发布时间.评论数(O(∩_∩)O哈哈~初级小白,暂时没用正则表达式) import requests '''爬取全部'' ...

  5. Python网络爬虫爬取虎扑步行街爆照区话题

    Python网络爬虫爬取虎扑步行街爆照区话题 作者:郜科科 最近的任务挺多的,但是心情很烦躁,想做一些自己喜欢的东西,前些时候感觉Python爬虫很好玩,就自学了一下.本人比较喜欢逛街--虎扑步行街, ...

  6. 用python网络爬虫爬取英雄联盟英雄图片

    用python爬虫爬取lol皮肤. 这也用python网络爬虫爬取lol英雄皮肤,忘了是看哪个大神的博客(由于当时学了下就一直放在这儿,现在又才拿出来,再加上马上要考二级挺忙的.),代码基本上是没改, ...

  7. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  8. python爬电影_使用Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  9. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

最新文章

  1. (全网率先解决)Pycharm在Debug的时候出现frames are not available;Variable:Connected
  2. 号称史上最牛逼的几篇博客整理(python+java+js等)
  3. c# java gt;gt;gt;,相同的字节数组=gt; Java和C#中的不同BigInteger值
  4. 进入postgresql
  5. 视频编解码优化以及与AI的实践结合
  6. [CSP-S Day1,Day2 游记]提高组考后总结及学习编程C++以来的心得体会
  7. aws spark_使用Spark构建AWS数据湖时的一些问题以及如何处理这些问题
  8. TLS总结(上)——我们为啥需要TLS
  9. 07-12-Exchange Server 2019-安装-CU1
  10. 117.填充同一层的兄弟节点II
  11. 4行代码,Python搞定美图秀秀!
  12. java程序控制马达_java控制步进电机
  13. 【原创】ESXI6.7+ikuai爱快搭建软路由(非常详细)
  14. IAR下载程序只有提示音,没有任何反应。或报错The configuration does not have debuggable output.(A debug-only project shoul
  15. Msg 547 The ALTER TABLE statement conflicted with the CHECK constraint .
  16. 盲盒是怎么赚钱的?(盲盒App的盈利逻辑)
  17. mysqladmin
  18. deeplab v3论文精读
  19. springboot slf4j log4j2 动态创建日志的方法
  20. Android中禁止WebView滑动

热门文章

  1. 初等数论--整除--整数表示:算数分解定理/素因数分解式/进制表示
  2. MySQL基本操作(表,字段)
  3. TCP/IP的基本介绍
  4. sql注入-union select
  5. NCTF2019 -- PWN部分writeup
  6. 160个Crackme047
  7. 160个Crackme044
  8. Android 布局属性 Android:layout_weight 总结
  9. 6、删除视图(DORP VIEW)
  10. 牛客竞赛语法入门班函数与递归习题【未完结】