一个完整的大作业

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

2.网络上爬取相关的数据。

3.进行文本分析,生成词云。

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

5.写一篇完整的博客,附上源代码、数据爬取及分析结果,形成一个可展示的成果。

 

1.网络爬虫

  网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 

   随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。 

  为了解决上述问题,定向抓取相关网页资源网络爬虫应运而生。 

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件 另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。
 

  本次爬取小说的网站为广州商学院官网中的校园新闻,我们需要通过对校园生活进行爬虫来看出校园新闻主要都在讲些什么。

 

先打开校园新闻的地址http://news.gzcc.cn/html/xiaoyuanxinwen/如下图所示

 

我们需要对所有的标题都爬取出来,然后放在本地文件中。

按F12我们可以看到网站的页面信息结构

如<div class="news-list-title" style="">我校筹集10万资金  支援粤北山区学校升级改造校园</div>这样的标题信息

  爬取代码如下

#coding:utf-8
import requests
import re
#encoding='utf-8' 不加这个的话会出现乱码,尝试了好多种才解决
output = open('D:\\bb.txt', 'a',encoding='utf-8')
from bs4 import BeautifulSoup
from datetime import datetime

webs = "http://news.gzcc.cn/html/xiaoyuanxinwen/"
res = requests.get(webs)
res.encoding = 'utf-8' 
soup = BeautifulSoup(res.text,"html.parser") 
def getpage():
    lists = int(soup.select('.a1')[0].text.rstrip("条")) 
    page = lists//10+1 
    return page

#输出标题信息并写入文件中以便以后使用
def shownews(url):
    res = requests.get(url)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text,'html.parser')    
    for news in soup.select('li'):
        if len(news.select('.news-list-title'))>0:
            title = news.select('.news-list-title')[0].contents[0]
            print(title,'\n')
            output.write(title+ '\n')

            

shownews(webs)   
for i in range(2,getpage()+1):   
    url_nextnew = ('http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html'.format(i))
    shownews(url_nextnew)
output.close()

  爬取的数据为学校所有发布的新闻,一共2198条,其中一部分如图所示

 

 爬取到数据之后就对数据进行分析和统计,代码如下

import jieba
output = open('D:\\dd.txt', 'a',encoding='utf-8')
txt = open('D:\\bb.txt',"r",encoding='utf-8').read()
#去除一些出现频率较高且意义不大的词
ex = {'我院','我校','学院','一行'}

ls = []
words = jieba.lcut(txt)
counts = {}
for word in words:
    ls.append(word)
    if len(word) == 1 or word in ex:
        continue
    else:
        counts[word] = counts.get(word,0)+1
#for word in ex:
#    del(word)
items = list(counts.items())
items.sort(key = lambda x:x[1], reverse = True)
for i in range(100):
    word , count = items[i]
    print ("{:<10}{:>5}".format(word,count))
    output.write("{:<10}{:>5}".format(word,count) + '\n')
output.close()

  结果的部分如图

再对这些数据做成词云,代码如下

#coding:utf-8
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

text =open("D:\\cc.txt",'r',encoding='utf-8').read()
print(text)
wordlist = jieba.cut(text,cut_all=True)
wl_split = "/".join(wordlist)

mywc = WordCloud().generate(text)
plt.imshow(mywc)
plt.axis("off")
plt.show()

  结果如图所示

从中我们可以看出一些内容

新闻对召开什么会议,举行什么比赛写的比较多,对工作的报道篇幅也很多。

而从学生和教授进行对比可以明显的看出新闻报道的内容多以学生为主。

在全国性和地区性上,很明显的广东省的报道也比全国的报道多很多

 

posted @ 2017-10-30 20:18  唐盛阳  阅读(211)  评论(0编辑  收藏  举报