• 在‘句子迷’爬取网友总结的方文山歌词并作词频统计


    要求:

    1. 选一个自己感兴趣的主题。
    2. 用python 编写爬虫程序,从网络上爬取相关主题的数据。
    3. 对爬了的数据进行文本分析,生成词云。
    4. 对文本分析结果进行解释说明。
    5. 写一篇完整的博客,描述上述实现过程、遇到的问题及解决办法、数据分析思想及结论。
    6. 最后提交爬取的全部数据、爬虫及数据分析源代码。

      在此次作业中,我通过爬取网站‘句子迷’中方文山的歌词片段来看其作词中词频以及网友较为喜欢方老师那些句子。
      在爬取的过程中主要遇到的问题是该网站对于请求过来的headers有做检查,所以需要加入headers参数,声明UA
      代码如下:

    import jieba
    import requests
    from bs4 import BeautifulSoup
    
    
    lyrics = ''
    headers = {
        'User-Agent': 'User-Agent:*/*'
    }
    
    resp = requests.get('http://www.juzimi.com/writer/%E6%96%B9%E6%96%87%E5%B1%B1', headers=headers)
    resp.encoding = 'UTF-8'
    print(resp.status_code)
    soup = BeautifulSoup(resp.text, 'html.parser')
    
    page_url = 'http://www.juzimi.com/writer/%E6%96%B9%E6%96%87%E5%B1%B1?page={}'
    page_last = soup.select('.pager-last')
    if len(page_last) > 0:
        page_last = page_last[0].text
    
    for i in range(0, int(page_last)):
        print(i)
        resp = requests.get(page_url.format(i), headers=headers)
        resp.encoding = 'UTF-8'
        soup = BeautifulSoup(resp.text, 'html.parser')
        for a in soup.select('.xlistju'):
            lyrics += a.text + ' '
    
    # 保留爬取的句子
    with open('lyrics.txt', 'a+', encoding='UTF-8') as lyricFile:
        lyricFile.write(lyrics)
    
    # 加载标点符号并去除歌词中的标点
    with open('punctuation.txt', 'r', encoding='UTF-8') as punctuationFile:
        for punctuation in punctuationFile.readlines():
            lyrics = lyrics.replace(punctuation[0], ' ')
    
    # 加载无意义词汇
    with open('meaningless.txt', 'r', encoding='UTF-8') as meaninglessFile:
        mLessSet = set(meaninglessFile.read().split('
    '))
    mLessSet.add(' ')
    
    # 加载保留字
    with open('reservedWord.txt', 'r', encoding='UTF-8') as reservedWordFile:
        reservedWordSet = set(reservedWordFile.read().split('
    '))
        for reservedWord in reservedWordSet:
            jieba.add_word(reservedWord)
    
    keywordList = list(jieba.cut(lyrics))
    keywordSet = set(keywordList) - mLessSet  # 将无意义词从词语集合中删除
    keywordDict = {}
    
    # 统计出词频字典
    for word in keywordSet:
        keywordDict[word] = keywordList.count(word)
    
    # 对词频进行排序
    keywordListSorted = list(keywordDict.items())
    keywordListSorted.sort(key=lambda e: e[1], reverse=True)
    # 将所有词频写出到txt
    for topWordTup in keywordListSorted:
        print(topWordTup)
        with open('word.txt', 'a+', encoding='UTF-8') as wordFile:
            for i in range(0, topWordTup[1]):
                wordFile.write(topWordTup[0]+'
    ')
    

      上面的代码生成的word.txt中,将词汇复制到网站https://wordsift.org/做词云生成,生成后的词云图如下:

    以上代码可在此下载

  • 相关阅读:
    函数式接口
    方法引用
    接口组成更新
    .Net Framework4.5中Asp.net mvc使用Singal R轮训实现导入进度条功能
    .net mvc使用FlexPaper插件实现在线预览PDF,EXCEL,WORD的方法
    可编辑树Ztree的使用(包括对后台数据库的增删改查)
    使用chosen插件实现多级联动和置位
    在ASP.NET MVC中使用区域来方便管理controller和view
    使用datepicker日期插件
    Linq to sql中使用DateDiff()
  • 原文地址:https://www.cnblogs.com/lger/p/8908426.html
Copyright © 2020-2023  润新知