zoukankan      html  css  js  c++  java
  • 爬虫大作业

    爬虫大作业

    1.选一个自己感兴趣的主题。

    2.用python 编写爬虫程序,从网络上爬取相关主题的数据。

    3.对爬了的数据进行文本分析,生成词云。

    4.对文本分析结果进行解释说明。

    5.写一篇完整的博客,描述上述实现过程、遇到的问题及解决办法、数据分析思想及结论。

    本次的大数据作业呢,是把我们爬取到的网页数据生成词云,在python中生成词云往往用到的就是使用   词云包wordcloud .

    但是我们安装wordcloud的时候会遇到问题:

    在Windows电脑终端使用pip install wordcloud并不能直接安装wordcloud

    首先我们先来解决几个可能会遇到的问题:

    我们在使用在cmd中使用pip install wordcloud总会出现如下面这种缺失东西情况:

    这是我在网上看的安装教程:https://blog.csdn.net/th_num/article/details/77095075  

                                                 https://blog.csdn.net/llx1026/article/details/77478895

    首先查看自己的python版本

    这时候需要读者前往一下链接http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud,在该链接下找到合适自己的wordcloud版本,下载到python安装目录下,然后打开电脑cmd终端,使用cd/d切换到wordcloud安装包文件夹下,在终端输入:pip install wordcloud-1.4.1-cp36-cp36m-win_amd64.whl

     如果遇到pip版本的问题则需要先进行pip更新,之后再安装,如下图所示:

    这样即可完成wordcloud安装!!!

    安装完后你还需要在python-pycharm里setting。

     如果实在是不行的话,这是wordcloud的包:      

    链接:https://pan.baidu.com/s/1HeuEtxgf_u23_zP31h_6NA   密码:38k2

    把下载好的包,拷到:软件(Python-pycharm)下,你的工程项目里面的    venvLibsite-packages   这里面。就行了。

    以下是我是爬取网易-云计算社区问答的词云:

    #coding=utf-8#coding=utf-8
    # -*- coding : UTF-8 -*-
    import requests
    from bs4 import BeautifulSoup
    import re
    import jieba
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    import pickle
    from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
    
    def getKeynews(content):
        content = ''.join(re.findall('[u4e00-u9fa5]', content))  # 通过正则表达式选取中文字符数组,拼接为无标点字符内容
        # 去掉重复的字符生成集合
        newSet = set(jieba._lcut(content))               #划分内容
        newDict = {}            #定义字典
        for i in newSet:
            newDict[i] = content.count(i)
        deleteList, keynews = [], []
        for i in newDict.keys():
            if len(i) < 2:
             deleteList.append(i)  #去掉单音无意义字符
        for i in deleteList:
            del newDict[i]
        dictList = list(newDict.items())
        dictList.sort(key=lambda item: item[1], reverse=True)  # 排序
        for dict in dictList:
            keynews.append(dict[0])
        return keynews
    
    # 将词云写入到文件
    def writeFilekeynews(keywords):
        f = open('Filekeynews', 'a', encoding='utf-8')
        for word in keywords:
            f.write(" "+word)
        f.close()
    
    #将回答内容写入文件
    def writeFilecontent(contnet):
        f = open('Filecontent.txt', 'a', encoding='utf-8')
        f.write("
    "+contnet)
        f.close()
    
    def getWordCloud():
        keynewsTowordcloud = open('keyword.txt', 'r', encoding='utf-8').read()
        print(keynewsTowordcloud)
        # text = pickle.load(keynewsTowordcloud)
        backgroud_Image = plt.imread('bg.jpg')
        wc = WordCloud(background_color='white',  # 设置背景颜色
                       mask=backgroud_Image,  # 设置背景图片
                       stopwords=STOPWORDS,
                       max_words=80,  # 设置最大现实的字数
                       font_path='C:WindowsFontsAdobeKaitiStd-Regular.otf',  # 设置字体格式,如不设置显示不了中文
                       max_font_size=80,  # 设置字体最大值
                       random_state=30,  # 设置有多少种随机生成状态,即有多少种配色方案
                       )
        wc.generate(keynewsTowordcloud)
        image_colors = ImageColorGenerator(backgroud_Image)
        wc.recolor(color_func=image_colors)
        plt.imshow(wc)
        plt.axis('off')
        plt.show()
    
    
    def getDetail(newsUrl):                                         #对每个li下的回答内容进行保存获取
        resd = requests.get(newsUrl)
        resd.encoding = 'utf-8'
        soupd = BeautifulSoup(resd.text, 'html.parser')
        content = soupd.select('.cnt-qs')[0].text
        writeFilecontent(content)
        keynews = getKeynews(content)
        writeFilekeynews(keynews)
    
    
    def Get_Pageurl(url):
        res = requests.get(url)
        res.encoding = 'utf-8'
        soup = BeautifulSoup(res.text, 'html.parser')
        for new in soup.select('.m-ask-item')[0].select('.item'):
            theUrl= new.select('.tlt.tlt-1')[0].select('a')[0]['href']                   #获取每个li标签下的url
            url = 'https://sq.163yun.com' + theUrl
            getDetail(url)
    
    
    url = 'https://sq.163yun.com/ask/search?current=1&keywords=5LqR6K6h566X'     #网易云问答的网站
    resd = requests.get(url)
    resd.encoding = 'utf-8'
    soup1 = BeautifulSoup(resd.text, 'html.parser')
    Get_Pageurl(url)                  #获取每个li标签下的url
    for i in range(2, 3):
        Get_Pageurl('https://sq.163yun.com/ask/search?current={}&keywords=5LqR6K6h566X'.format(i))
    getWordCloud()

    结果如下:

    对文本分析结果进行解释说明。

    以上就是分词后进行词云统计的结果,首先是爬取相关数据,之后保存到文本中,再对文本进行分词处理,最后运用wordcloud包进行词云生成。

    问题:

    wordcloud包安装时的问题,以及一些陌生的库的使用。

    方法:找同学帮忙,上网搜索问题原因所在。

  • 相关阅读:
    js如何实现base64转文件下载保存到本地
    安装node及环境配置
    一定需要使用(N)Text吗?
    MS Sql Server EXECUTE
    [teach.net]表组织和索引组织
    Optimization Rules of Thumb[part of Technet Article]
    vs2008的用户自定义控件
    执行计划的缓存和重新使用
    保持索引的健康
    SQLServer性能优化计数器
  • 原文地址:https://www.cnblogs.com/tiankongyiluozhiwu/p/8974198.html
Copyright © 2011-2022 走看看