直接从微博中找不到微博的历史热搜数据的,可以通过这个网站 https://www.weibotop.cn/ 找到微博的历史热搜数据。爬取下来后保存为csv格式的数据,在使用Python pandas库和结巴分词库进行处理,得到分词结果,再对分词结果进行词频计算,得到echarts词云的原数据。
2.Python爬取网页数据参照了网上大佬的爬虫代码,对 https://www.weibotop.cn/的网页进行爬取。
首先找到数据存在网页那个位置,我们才好进行数据的爬取,打开这个网站,右键检查网页,打开network,刷新一遍可以发现数据在下面的。
再分析网页链接,可以发现只需要动态更改时间,就可以实现历史热搜数据的爬取。timeID就是更改时间的值。
按照上面分析的,我们对网页进行爬取,动态更改timeID的值,就获取到2020-01-01到今天的所有热搜数据。最后保存到csv文件中。
import Jsonimport requestsimport csvdef requests_web_data(url):try:headers = {"User-Agent": "", "cookie": ""}r = requests.get(url, headers=headers)# 判断返回的Response类型状态是不是200。如果是200,他将表示返回的内容是正确的,如果不是200,他就会产生一个httpError的异常。r.raise_for_status()r.enCoding = r.apparent_enCoding # 编码为网页的编码except:print('requests error!')else:return r.contentdef get_weibo_historical_data():latest_time_ID_url = 'https://www.eecso.com/test/weibo/APIs/getlatest.PHP'latest_time_ID = Json.loads(requests_web_data(latest_time_ID_url).decode('utf-8'))[0]# 筛选获取time_IDtime_IDs = []for x in range(48438, int(latest_time_ID) + 1, 180): # time_ID=48438:2020-01-01time_ID_url = 'https://www.eecso.com/test/weibo/APIs/getlatest.PHP?timeID=' + \str(x)time_data = Json.loads(requests_web_data(time_ID_url).decode('utf-8'))if time_data is not None:time = time_data[1].split(' ')[1].split(':')[0]if time == '00' or time == '12':time_IDs.append(time_data[0])if time_IDs[-1] != latest_time_ID:time_IDs.append(latest_time_ID)# 通过筛选的time_ID获取一月份的热搜数据weibo_hot_data = []for time_ID in time_IDs:historical_data_url = 'https://www.eecso.com/test/weibo/APIs/currentitems.PHP?timeID=' + \str(time_ID)data = Json.loads(requests_web_data(historical_data_url).decode('utf-8'))weibo_hot_data.append(data)out = open("数据001.csv", "w", enCoding="UTF-8", newline="")csv_write = csv.writer(out, dialect="excel")for i in range(0, len(weibo_hot_data)):csv_write.writerow(weibo_hot_data[i])return weibo_hot_dataif __name__ == "__main__":get_weibo_historical_data()
最后我们得到的数据格式为:这个格式数据比较乱,需要对此进行处理。
3.数据处理对这个格式的代码进行了几步处理,详细代码就不全部演示了,这是分词去停用词后的数据处理结果。
再根据这个结果计算词频出现的次数,得到如下所示的Json对象格式数据。
数据处理完成了,那么就开始画图,画图前要先准备好echarts.Js和echarts-wordcloud.Js两个库,通过script标签引入即可使用。echarts代码如下所示:
<!DOCTYPE HTML><HTML lang="en"><head> <Meta charset="UTF-8"> <Title>document</Title></head><body> <script src="echarts.min.Js"></script> <script src="echarts-wordcloud.Js"></script> <script src="WB.Js"></script> <div ID="main" ></div> <script>//开始画图var myChart = echarts.init(document.getElementByID('main'));option = { baSEOption: {timeline: { axisType: 'category', autoplay: true, playInterval: 5000, data: t_data},tooltip: { show: true},serIEs: [{ type: "wordCloud", grIDSize: 6, shape: 'diamond', sizeRange: [12, 50], wIDth: 800, height: 500, textStyle: {normal: { color: function () {return 'rgb(' + [ Math.round(Math.random() * 160), Math.round(Math.random() * 160), Math.round(Math.random() * 160)].join(',') + ')'; }},emphasis: { shadowBlur: 10, shadowcolor: '#333'} }, data: dataset[0]}], }, options: [ ]};for (let i = 0; i < dataset.length; i++) { option.options.push({Title: { text: t_data[i]},serIEs: [{ type: "wordCloud", grIDSize: 6, shape: 'diamond', sizeRange: [12, 50], wIDth: 800, height: 500, textStyle: {normal: { color: function () {return 'rgb(' + [ Math.round(Math.random() * 160), Math.round(Math.random() * 160), Math.round(Math.random() * 160)].join(',') + ')'; }},emphasis: { shadowBlur: 10, shadowcolor: '#333'} }, data: dataset[i]}], });}myChart.setoption(option); </script></body></HTML>
运行这个代码就可以得到词云图了,并且词云和时间轴联系在一起,会自动实现日期的更换和词云的更新。
总结以上是内存溢出为你收集整理的Echarts(1):Python爬取微博热搜并用Echarts词云展示全部内容,希望文章能够帮你解决Echarts(1):Python爬取微博热搜并用Echarts词云展示所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)