from urllib.parse import urlencode
import requests
from pyquery import PyQuery as pq
import time
import os
import csv
import json
import pandas as pd
#-----------------------------------判断是否存在文件,否则增加
if os.path.exists('微博热词.csv'):os.remove('微博热词.csv')
if os.path.exists('微博热词.txt'):os.remove('微博热词.txt')
try:f =open("停用词库.txt",'r')f.close()
except IOError:f = open("停用词库.txt",'w')f.close()try:f =open("分词词典.txt",'r',encoding='utf-8')f.close()
except IOError:f = open("分词词典.txt",'w',encoding='utf-8')f.close()#-----------------------------------判断是否存在文件,否则增加base_url = 'https://m.weibo.cn/api/container/getIndex?'headers = {'Host': 'm.weibo.cn','Referer': 'https://m.weibo.cn/u/2830678474','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36','X-Requested-With': 'XMLHttpRequest',
}
class SaveCSV(object):def save(self, keyword_list,path, item):"""保存csv方法:param keyword_list: 保存文件的字段或者说是表头:param path: 保存文件路径和名字:param item: 要保存的字典对象:return:"""try:# 第一次打开文件时,第一行写入表头if not os.path.exists(path):with open(path, "w", newline='', encoding='utf-8') as csvfile:  # newline='' 去除空白行writer = csv.DictWriter(csvfile, fieldnames=keyword_list)  # 写字典的方法writer.writeheader()  # 写表头的方法# 接下来追加写入内容with open(path, "a", newline='', encoding='utf-8') as csvfile:  # newline='' 一定要写,否则写入数据有空白行writer = csv.DictWriter(csvfile, fieldnames=keyword_list)writer.writerow(item)  # 按行写入数据print("^_^ write success")except Exception as e:print("write error==>", e)# 记录错误数据with open("error.txt", "w") as f:f.write(json.dumps(item) + ",\n")passdef get_page(page,title): #得到页面的请求,params是我们要根据网页填的,就是下图中的Query String里的参数params = {'containerid': '100103type=1&q='+title,'page': page,#page是就是当前处于第几页,是我们要实现翻页必须修改的内容。'type':'all','queryVal':title,'featurecode':'20000320','luicode':'10000011','lfid':'106003type=1','title':title}url = base_url + urlencode(params)print(url)try:response = requests.get(url, headers=headers)if response.status_code == 200:print(page)return response.json()except requests.ConnectionError as e:print('Error', e.args)# 解析接口返回的json字符串
def parse_page(json , label):res = []if json:items = json.get('data').get('cards')for i in items:if i == None:continueitem = i.get('mblog')if item == None:continueweibo = {}weibo['id'] = item.get('id')weibo['label'] = labelweibo['text'] = pq(item.get('text')).text().replace(" ", "").replace("\n" , "")res.append(weibo)return resif __name__ == '__main__':title = input("请输入搜索关键词:")path = "微博热词.csv"item_list = ['id','text', 'label']s = SaveCSV()for page in range(10,20):#循环页面try:time.sleep(1)         #设置睡眠时间,防止被封号json = get_page(page , title )results = parse_page(json , title)if requests == None:continuefor result in results:if result == None:continueprint(result)s.save(item_list, path , result)except TypeError:print("完成")continue#数据转txt------------------------------------
data = pd.read_csv('微博热词.csv', encoding='utf-8')
with open('微博热词.txt','a+', encoding='utf-8') as f:for line in data.values:f.write((str(line[0])+'\t'+str(line[1])+'\n'))#---------------------------------词云图
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author LQ6Himport jieba
from collections import Counter
import pyecharts.options as opts
from pyecharts.charts import WordClouddef get_text():# f=open("text1.txt",encoding="gbk")f = open("微博热词.txt", encoding="utf-8")lines=f.read()text=lines.split("\n\n")return "".join(text)def split_word(text):jieba.load_userdict("分词词典.txt")# word_list=list(jieba.cut_for_search(text))#精准模式后搜素模式word_list = list(jieba.cut(text))#默认进准模式with open("停用词库.txt") as f:meaningless_word=f.read().splitlines()result=[]for i in word_list:if i not in meaningless_word:result.append(i.replace(" ",""))return resultdef word_counter(words):words_counter=Counter(words)words_list=words_counter.most_common(101)#排名前Nfc = words_listwith open('分词排名.txt', 'a+', encoding='utf-8') as f:for line in fc:f.write((str(line[0]) + '\t' + str(line[1]) + '\n'))return words_listdef word_cloud(data):(WordCloud().add(series_name="热词分析",data_pair=data,word_gap=5,word_size_range=[20,100],#词的大小[20,500]shape="",rotate_step=90,# width=2000,# height=1000# mask_image="书.jpg").set_global_opts(title_opts=opts.TitleOpts(title="热词分析",title_textstyle_opts=opts.TextStyleOpts(font_size=23)),tooltip_opts=opts.TooltipOpts(is_show=True),).render("微博热词.html"))def main():text=get_text()words=split_word(text)data=word_counter(words)word_cloud(data)if __name__ == '__main__':main()

最终效果
数据整理


分词计数

分词生成txt

通过‘’分词词典‘’自定义词语,通过停用词库,取消词统计。(每行一个数据)

微博热词搜索并生成云词html(完整)相关推荐

  1. 文本挖掘之WordCloud+Python3快速生成中英文词云图

    引言: "词云",又称文字云,是由词汇组成类似云的彩色图形.可对网络文本中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或&q ...

  2. android中的热词搜索的实现

    热词搜索的实现方法其实就是平常SDK项目中view的实现方法,根据实际的需求新建出相应个数的textview. 首先通过createTextView方法实现textview的创建,代码如下: /** ...

  3. python生成中文词云的代码_[python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写...

    1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意 ...

  4. python删除中文停用词_python词云 wordcloud+jieba生成中文词云图

    简介 Python+jieba+wordcloud+txt+gif生成动态中文词云 本文基于爬虫爬取某微信号三个月的文章为例,展示了生成中文词云的完整过程.本文需要的两个核心Python类库: jie ...

  5. 封装汉语自然语言处理中的常用方法(附代码:生成中文词云)

    前叙 该文章写作共花费二十分钟,阅读只需要七分钟左右,读完该文章后,你将学会使用少量代码,将中文小说,中文新闻,或者其他任意一段中文文本生成词云图 背景 在进行汉语自然语言处理时候,经常使用的几个方法 ...

  6. Python快速简单生成矩形词云

    效果 实现 打开IDLE新建文件rectangle.py import os from os import path from wordcloud import WordCloud from matp ...

  7. python中文词云生成_Python 词云生成

    图片来自网络所谓"词云"就是对网络文本中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或"关键词渲染",从 ...

  8. python生成的词云没有图案_还在为专栏封面发愁?我用Python写了个词云生成器!...

    妈妈再也不用担心我写专栏找不到合适的封面了!B站专栏的封面至少是我一直头疼的问题,每次写完文章却找不到合适的图片作为封面. 词云是一个很不错的选择,既美观,又提纲挈领.网上也有词云生成的工具,但大多收 ...

  9. jieba库词频统计_用jieba库统计文本词频及云词图的生成

    一.安装jieba库 :\>pip install jieba #或者 pip3 install jieba 二.jieba库解析 jieba库主要提供提供分词功能,可以辅助自定义分词词典. j ...

  10. python生成的词云没有图案_Python如何生成词云的方法

    这篇文章主要介绍了关于Python如何生成词云的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先 ...

最新文章

  1. 一次利用位图索引进行SQL优化的案例
  2. SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作
  3. 利用代码改变世界 #AzureDev
  4. sql表格模型获取记录内容_SQL Server和BI –如何使用Reporting Services 2016记录表格模型
  5. pytorch 三维点分类_基于深度学习的三维重建——MVSNet系列论文解读
  6. wireshark-抓包极简使用教程
  7. 陶哲轩实分析 习题 12.5.4,12.5.5
  8. FPGA信号处理系列文章——数字锁频环
  9. 【CV】图像恢复(去噪,去模糊,超分)模型 DPDNN 论文笔记
  10. 提升 10 倍!阿里云对象存储 OSS 可用性 SLA 技术揭秘
  11. JVS公众号登陆配置
  12. Interpro 安装问题
  13. 编译器与Debug的传奇:女牛人Grace Murray Hopper小传
  14. 使用64位任务管理器转储的32位.NET进程dump,WinDbg如何调试
  15. FPGA中的竞争冒险消除
  16. Unity鼠标滚轴缩放大小
  17. word2007计算机应用能力试题,计算机应用基础试题「附答案」
  18. 自学C++——自定义数据类型
  19. 2010年,我发现了淘宝购物省钱的秘密
  20. 基于Matlab simulink平台搭建IEEE15节点仿真模型,对电力系统进行潮流计算

热门文章

  1. 对于解决新版unity5.x的license error 问题
  2. 使用 Go 进行 iOS 和 Android 编程
  3. 思维题 数颜色(洛谷 P3939)
  4. python+selenium+scrapy框架爬取斗鱼主播相册内的 图片
  5. 桌面扫码点餐系统(小程序+Java后台)
  6. miui7 android系统版本,miui7系统
  7. (七)设定目标:原理与方法
  8. 从新品抽奖小程序思考微信工具型小程序的发展
  9. 什么是UI设计?UI学习一般分几个阶段呢?
  10. 领导力21法则-- 要点总结