爬虫大作业

爬虫大作业

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包安装时的问题,以及一些陌生的库的使用。

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

原文地址:https://www.cnblogs.com/tiankongyiluozhiwu/p/8974198.html