TED-WordCloud: 4000+视频标题词云分析

这是一次爬虫尝试,涵盖TED到目前为止共4000+视频标题的提取,结果以文本格式存储,然后使用wordcloud词云库,生成可视化的云图。

TED演讲是啥?

官网地址:https://www.ted.com/

TED(指technology, entertainment, design在英语中的缩写,即技术、娱乐、设计)是美国的一家私有非营利机构,该机构以它组织的TED大会著称,这个会议的宗旨是“值得传播的创意”。

这个演讲主要集中在用思想的力量来改变世界。如今已经累积有4000多条视频,每位讲述者或令人印象深刻、或激情拍好、或感人心灵。算是当下世界共享mooc学习的先锋,视频一般都会带上多国翻译字幕,既可以学习,又可以感知内容。

具体实现步骤

第一步:爬取整站点视频标题,使用多线程,耗时15s即可完成。

from requests_html import HTMLSession
import threading #多进程
import time
import _thread

base_url = 'https://www.ted.com/talks?page='
session = HTMLSession()

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}

def page_num():
    url = 'https://www.ted.com/talks'
    r = session.get(url, headers=headers)
    res = r.html.find('a.pagination__item.pagination__link')
    num = []
    for x in res:
        num.append(x.text)
    return num[-1]


def get_title(i):
    global id #在函数内部修改全局变量的值,要先用global声明全局变量。
    url = base_url + str(i)
    #print(url)
    r = session.get(url, headers=headers)
    #r.html.render(scrolldown=3, sleep=0.01)  #下拉3次,这里函数不能用在多线程中
    titles = r.html.find('h4 a.ga-link')
    with open('titles.txt', 'a', encoding="utf-8") as f:  #使用utf-8编码
        for title in enumerate(titles):
            s = f'{title.text}'
            print(s)
            f.write(s + '\n')


def main():
    total_page = int(page_num())
    print(f'总共有{total_page} 页')
    threads = []    #进程列表
    for i in range(1, total_page+1):
        #get_title(str(i))
        t = threading.Thread(target=get_title,args=(i,))  #每个页面启动一个新的线程
        #t.start()   #也可以在这里直接start
        threads.append(t)

    for t in threads:
        t.start()   #依次启动所有进程
        
    for t in threads:
        t.join()


if __name__ == '__main__':
    start = time.time()
    main()
    end = time.time()
    print(f'总共耗时:%d 秒' %(end - start))

运行后,同级目录下生成title.txt

第二步:词云生成

from wordcloud import WordCloud

f = open(u'titles.txt','r', encoding="utf-8").read()
wordcloud = WordCloud(background_color="white",width=1000, height=860, margin=2).generate(f)
wordcloud.to_file('titles.png')

运行后,在同级目录生成title.png

总结

虽然完整的完成了功能,但是没有使用正则查找(借助了requests_html库),也没能实现进度条。

 

 

参考链接:https://baiyue.one/archives/1526.html

posted @ 2020-01-16 10:19  Rogn  阅读(547)  评论(0编辑  收藏  举报