淮师2017校园新闻爬取&&WordCloud年度词云分析

5 篇文章 1 订阅

前言:最近一直想做数据采集这块,想到年底了,来个年终总结什么的。所以就想到了爬取学校2017年的校内新闻。基于采集的五百多篇新闻结合Python的WordCloud做出来个词云,可视化新闻图片,根据关键词出现次数自动设置大小。效果图如下:

一、爬虫模块:

       爬虫模块使用了Java的开源爬虫框架jsoup。通过对页面的批量获取以及对网页进行分析从而得到新闻内容。
因为学校的网站过于简单安静,没有使用现在流行的json接口,也没有严格的反爬虫验证,所以爬取新闻没什么技术难度,那就不需要去找接口了,比网易那个简单多了,有兴趣可以看看我那篇博客大笑 网易云音乐API获取分析
      从上面的图片可以看出,新闻列表是写在table中的,每一个标题就是对应一个链接,也就是新闻正文部分。所以我们第一步就是要先通过新闻列表获取新闻详情。
首先批量获取新闻的URL。使用get方式请求链接获取网页内容,返回来是一个完整的网页内容。我们该如何通过从一个复杂的网页获取我们想要的内容呢?引出jsoup框架,一代神器!使用jsoup框架的时候你感觉你在使用正则表达式,但是比正则容易多了。jsoup的官网:http://www.open-open.com/jsoup/

1、获取新闻链接

先贴上代码看看:
public static void getArticleList(){
		
		for (int i = 1; i <38; i++) {
		
			String list = HttpUtils.doGet("http://www.hnnu.edu.cn/s/21/t/148/p/11/i/"+i+"/list.htm");
			Document doc = Jsoup.parse(list);
			Elements div_content = doc.select("a[href][target][style]");
			for (Element element : div_content) {
				String href = element.attr("href");
				getArticle(href);
			}
		}
	}
1)分析链接,通过查阅可以看出2017年的新闻总共占了37页,通过for循环就可以获取2017年的列表页。
2)通过工具类获取网页内容。
3)先获取document对象,再输入指定的过滤规则就可以得到a标签,但是我们需要获得a标签里面的href属性。
4)使用Element的attr方法获得标签里面的属性


2、爬取新闻内容


public static void getArticle(String url ){
		//先获取新闻列表
		count++;
		System.out.println("第"+count+"篇文章");
		String getUrl = "http://www.hnnu.edu.cn"+url;
		String list = HttpUtils.doGet(getUrl);
		Document doc = Jsoup.parse(list);
		Elements div_content = doc.select("span[style]");
		//将爬取的新闻转化为集合
		List<String> eachText = div_content.eachText();
		StringBuffer content = new StringBuffer();
		for (int i = 0; i < eachText.size(); i++) {
			//去除作者等信息
			if(i>2){
				content.append(eachText.get(i));
			}
		}
		//System.out.println(content.toString());
		//以Mybatis方式插入数据库
		ArticleService as = new ArticleService();
		Article article = new Article(content.toString(), getUrl);
		System.out.println(article);
		
		as.insert(article);
		
	}
1)先请求获取新闻详情网页
2)发现新闻的内容都是写在了span标签里面,通过指定获取span标签的内容
3)再使用span[style]近一步过滤内容
4)为了后面的数据分析的准确度,所以此处去除作者之类的内容
5)使用MyBatis框架将数据写到数据库中。如下图:



二、词云模块:

词云模块使用了Python语言。
1、首先安装WorlCloud模块。当然不是一次就能安装成功的快哭了,遇到了很多坑!放弃Python2使用了Python3,无奈,Python2安装插件安装了一晚上加一上午,还没搞定!果断换了Python3。抛出链接,自己总结了一下http://blog.csdn.net/qq_31673689/article/details/78745155
2、使用Python的PyMysql框架读取数据库,关于pymysql的安装和使用请看我的另一篇博客:http://blog.csdn.net/qq_31673689/article/details/78745207
3、将新闻内容取出写入到本地的一个TXT文件中,贴出代码:
# -*- coding: utf-8 -*-
import pymysql.cursors
#数据库连接设置
connection = pymysql.connect(host='127.0.0.1',
                             port=3306,
                             user='root',
                             password='root',
                             db='mybatisdemo',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)
cursor = connection.cursor()
sql = "select * from article"
#执行sql查询
cursor.execute(sql)
#查询所有,得到结果集
result = cursor.fetchall()
#循环遍历获取结果

#以追加的方式打开文件,设置为utf-8
f = open('D:\\PythonStudio\\WORK\\Demo1\\test.txt','a',encoding='utf-8')

for data in result:
    id = data["id"]
    #获取新闻内容
    content = data["content"]
    url = data["url"]
    f.write(content)
    print(id,content,url)

connection.close()
f.close()
4、使用WordCloud模块对TXT文件读取自动分析,并自动生成结果图片 得意
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from os import path
from scipy.misc import imread

d = path.dirname(__file__)
#两种读取背景图片方式,注意路径不能使用\
pic = np.array(Image.open('D:/PythonStudio/WORK/Demo1/Ciyun/github4.png'))
bg_pic = imread(path.join(d,'github.png'))

#读取收集文章的TXT文件需要使用utf-8
f = open(u'D:/PythonStudio/WORK/Demo1/test.txt','r',encoding='utf-8').read()
# 你可以通过font_path参数来设置字体集
# width,height,margin可以设置图片属性
wordcloud = WordCloud(font_path = r'C:\\Windows\\Fonts\\STFANGSO.ttf',
                      background_color="white",
                      max_words=1000,
                      max_font_size=100,
                      random_state=50,
                      scale=5,
                      mask=pic).generate(f)
#显示结果
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
#保存到本地图片中
wordcloud.to_file('test.png')


最后我们获取到了年度新闻词云图片




总结:本次小项目使用到了Java和Python两种语言,(其实Python也适合爬虫,但是现在Java比较顺手,所以将就了就使用了Java)新闻爬取模块没什么难点,就是细心一点分析一下网页就行了。Python的模块就比较坑了!各种不兼容,插件安装不上去!最后还是靠着耐心解决了(其实就是删除重装闭嘴)。最后的图片效果我是挺满意的,挺好看的,内容也十分的丰富。喜欢的就点个赞吧吐舌头


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值