python从入门到放弃篇43(selenium库,wordcloud库,pyecharts库)爬取名人名言,词云分词并统计词频,pyecharts分段可视化

今天,研究了一波词云的函数,发现词云有英文分词还能统计词频的功能,所以,我觉得有点意思,这个跟pyecharts联合起来那会是什么效果呢?

这次案例的网址是:http://quotes.toscrape.com/js/
爬虫部分的代码:

from selenium import webdriver
from random import randint
import time

url = 'http://quotes.toscrape.com/js/'
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(3)

xpath_road = '/html/body/div'
says = driver.find_element_by_xpath(xpath_road)
with open(r'名人名言.txt','a',encoding='utf-8') as f:
    f.write(says.text+'\n')
#print(says.text)
next_page = driver.find_element_by_xpath('/html/body/div/nav/ul/li/a')
next_page.click()

for i in range(1,10):
    xpath_road2 = '/html/body/div'
    says2 = driver.find_element_by_xpath(xpath_road2)
    with open(r'名人名言.txt','a',encoding='utf-8') as f:
        f.write(says2.text+'\n')
        time.sleep(randint(2,3))
    #print(says2.text)
    time.sleep(1)
    if i == 9:
        break
    else:
        next_page2 = driver.find_element_by_xpath('/html/body/div/nav/ul/li[2]/a')
        next_page2.click()

对于这段代码需要解释的朋友,可以去参见我之前29篇的文章,这次,我主要做分词和词频统计和可视化。所以,我就不详解了。

接下来,我们进入分词和词频统计,加上可视化。代码如下图:

from wordcloud import WordCloud#导入词云库
from pyecharts.charts import Bar#从pyecharts.charts()函数导入Bar()柱状图/条形图
B = Bar()#实例化条形图对象
dict1 = {}#创建空子典1
dict2 = {}#创建空子典2
x_list1 = []#定义列表1的横轴
y_list1 = []#定义列表1的纵轴
x_list2 = []#定义列表2的横轴
y_list2 = []#定义列表2的纵轴
with open('D:/pycharm_project/名人名言.txt','r+',encoding='utf-8') as f:#打开文件,以读取方式打开,编码方式是'utf-8'
    text = f.read()#读取文件
    #print(text)
    wc = WordCloud(repeat=True,colormap='inferno')#创建词云对象
    words=WordCloud.process_text(wc,text)#WordCloud.process_text()函数进行分词,并进行词频统计
    #print(words)
    for i in words:#words是一个统计的分词是以字典形式返回的
        if words[i] > 15:#如果字典的值大于15的话
            dict1[i] = words[i]#则在新建的空字典1加入该键值对
        elif 10 < words[i] <= 15:#如果字典的值大于10小于15的话
            dict2[i] = words[i]#则在新建的空子典2加入该键值对
        else:#否则
            continue#跳过,继续下一个单词的判断
#print(dict)
print('大于15的单词有:')#输出句子
for k in dict1:#遍历字典1
    print(k,':',dict1[k])#输出大于15的单词及其词频统计
    x_list1.append(k)#在空列表内加入横轴的数据
    y_list1.append(dict1[k])#在空列表内加入纵轴的数据
B.add_xaxis(x_list1)#将列表内的数据传递给条形图函数进行绘制
B.add_yaxis('Word',y_list1)#将列表内的数据传递给条形图进行绘制
print()#换行为了跟后面打印输出的单词重叠
print()#换行
print('大于10小于16的单词有:')#输出句子
for k2 in dict2:#遍历字典2
    print(k2,':',dict2[k2])#输出大于10且小于16的单词及其词频统计
    x_list2.append(k2)#往空列表内加入横轴的数据
    y_list2.append(dict2[k2])#往空列表内加入纵轴的数据
B.add_xaxis(x_list2)#原理同上
B.add_yaxis('Word2',y_list2)#原理同上

B.render('E:/Example/名人名言可视化.html')#render()函数将HTML文件另存为一个位置。

对于代码的解释,我都写在了注释里面了,要是有朋友有疑惑,可以跟我私聊,一起探讨。毕竟,我的代码也是存在些许不足,只是我没有发现而已。

运行结果,如下图:
python从入门到放弃篇43(selenium库,wordcloud库,pyecharts库)爬取名人名言,词云分词并统计词频,pyecharts分段可视化_第1张图片
去E盘目录找到文件打开,如下图:
python从入门到放弃篇43(selenium库,wordcloud库,pyecharts库)爬取名人名言,词云分词并统计词频,pyecharts分段可视化_第2张图片
错了,,跟我预期的不一样,发现是重复x轴和y轴了,修改后半部分的代码,如下图:
python从入门到放弃篇43(selenium库,wordcloud库,pyecharts库)爬取名人名言,词云分词并统计词频,pyecharts分段可视化_第3张图片
再运行一次,结果如下:
python从入门到放弃篇43(selenium库,wordcloud库,pyecharts库)爬取名人名言,词云分词并统计词频,pyecharts分段可视化_第4张图片
OK,搞定了,这就是想要的结果,虽然还是有些差别,但是明天再修正了,今天发文结束。

最后,感谢大家前来观看鄙人的文章,文中或有诸多不妥之处,还望指出和海涵。

你可能感兴趣的:(python数据分析例子,python,selenium,可视化)