爬虫大作业

 1.选一个自己感兴趣的主题(所有人不能雷同)。

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

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

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

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

6.最后提交爬取的全部数据、爬虫及数据分析源代码。

 

 

本人选取的主题是羽毛球新闻。作为一名资深的羽毛球爱好者,平常也会关注着方面的新闻,例如国内外的羽毛球赛事、球员动态、球技分享等等。

本次爬取的网址是爱羽客新闻网:http://www.aiyuke.com/view/cate/index.htm

 

一、实现过程

我们可以先用开发者工具来看一下网页的结构:

 

可以看到每一条新闻由<div class="news_list_box clearfix">装着,所以可以获取其标题连接:

def getListPage(pageUrl): #一个列表页的全部信息
    res=requests.get(pageUrl)
    res.encoding='utf-8'
    soup = BeautifulSoup(res.text, 'html.parser')
    newslist = []
    for news in soup.select('.news_list_box.clearfix'):
        if len(news.select('.desc')) > 0:
            newsUrl = news.select('a')[0].attrs['href']  # 连接
            newslist.append(getNewDetail(newsUrl))
            #  t = news.select('h1')[0].text.strip()  # 标题
    return (newslist)

  

打开详情页,可以看到:

 

打开详情页的代码如下:

def getNewDetail(newsUrl):#一篇新闻的详情信息
    resd = requests.get(newsUrl)
    resd.encoding = 'utf-8'
    soupd = BeautifulSoup(resd.text, 'html.parser')
    news = {}  # 用字典存放信息
    news['title'] = soupd.select('h1')[0].text.strip()  # 标题
    news['info'] = soupd.select('.news_from')[0].text.strip().lstrip('来源:')  # 来源
    d = soupd.select('.news_date')[0].text.strip()
    news['dt'] = datetime.strptime(d, '%Y-%m-%d %H:%M:%S')  # 发布时间
    news['comment'] = int(soupd.select('b')[0].text.strip())  # 评论人数
    news['description'] = soupd.select('.news_description')[0].text.strip()  # 描述
    n = soupd.select('#js-news-txtbody')[0].text
    if n.find('本文系爱羽客羽毛球网原创,未经允许严禁转载:') > 0:
        news['content'] = n[:n.find('本文系爱羽客羽毛球网原创,未经允许严禁转载')].strip()
    else:
        news['content'] = n[:n.find('p.declare{')].strip()
    writeNewsDetail(news['content'])
    news['newsUrl'] = newsUrl#链接
    return (news)

  

详细信息我们可以放在Excel表中

import pandas
df=pandas.DataFrame(newstotal)
df.to_excel('big.xlsx')#导出到Excel表

  结果如图所示:

 

其内容文章,我们可以将数据保存在文件里,代码如下:

def writeNewsDetail(content):
    f = open('big.txt', 'a', encoding='utf-8')
    f.write(content)
    f.close()

  结果如图所示:

 

然后我们可以获取不同页码,通过网址线索可以发现

listPageUrl='http://www.aiyuke.com/view/cate/index.htm?page={}'.format(i)

  那么依次输出信息:

pageUrl='http://www.aiyuke.com/view/cate/index.htm'
newstotal=[]
for i in range(1,35):
    listPageUrl='http://www.aiyuke.com/view/cate/index.htm?page={}'.format(i)
    newstotal.extend(getListPage(listPageUrl))

for news in newstotal:
    print(news)

  

获取了这些之后,我们可以对数据进行词频统计,但在这之前,需要进行分词

(下载:https://pypi.python.org/pypi/jieba/   然后解压文件F:\jieba-0.39    安装:python setup.py install    打开项目选择file-->settings...-->project-projiect interpreter右边选择“+”,输入jieba,然后下方选择“install packages”)

首先,要去掉标点符号。将内容中的标点符号等分隔符全部替换为空格。接着,进行分词切割,(同时我们可以去掉我们不需要的信息放在一个集合里)进行词频统计。并保存在文件中,

代码如下:

import jieba
file = open('big.txt', 'r', encoding='utf-8')
word = file.read()
file.close()
sep='''-/.·+—…(),,。:?“”:、;!《》【】1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'''
exclude={' ','\n','\t','\xa0','换','巴','姐','跑','存','居','坦','句','声','背','省','养','慢','班','套', '划','厚','抗','块','纱','恩','翔','昨日','出色','首轮','训练','退赛','直线','尽管','任何','身高','记者','机会','相信','史上','全国','根森','最大','两局','领先','包括','这项', '首局','的话','分钟','很大','体育','如何','不要','客小编','排名第','练习','按','城','掌','利亚','变化','完全','不敌','双方','活动','东野','更是','搭档','赛场','规则','有些','欢迎','赢得','提高','晚', '味','托','括','一种','冷','肯定','工作','其中','追','败','渡边','明显','输','了解','广州','第一','参赛','实现','级赛','代表','闻','不错','报道','决胜','胜局','关注','出球','发展','男队','谈','鞋面','名单','同样','李宁','啊','查','蔡','票','采访','公司','要求','输给','真的','降','秀','宝','随后','有点','其他','容易','正手','膝','吉','勇大','朋友','再次','亮','发现','号种','停','六','留','听','复出','高度','找','目标','博','被动','萨','命','馆','首次','淘','怎么','对角','八','急','一轮','永','字','努力','特别','专业','结果','孙','识','吗','织','掉','球队','准','属','便','面对','最好','对方','救','赞助','级别','赵','野','来自','关键','名将','历史','挑战','提升','保持','整体','南','举办','盖','一下','减','侧','甚至','这么','险','运动员','桃田','病','两个','琳','群','签','确实','抽','继续', '夺得','表现','状态','案','队友','起来','切','一般','接受','住','照','引','岛','比赛','龙大','直接','汉','喜欢','炫','条','应该','头顶','更新','演','试','德拉','塔','妹','运动会','肯','黑衣','拍框','冲','死','主要','队伍','诺','轻松','项目','讨','甚','一起','职业','目前','实力','必须','弹','本次','短','所有','类','流','出现','苦','批','生涯','设计','图','告','笑','志','举行','水平','致','之一', '注意','更好','第二局','二局','比分','缺','遭','离','请','深','置','贤','紧','对手','电','投','装', '率','动作','能力','赛后','组合','球员','资格','士','念','通过','产','一步','而且','如今','负','进入','绝', '曼','球星','直播','除了','久','三局','车','帮','当时','维尔','竟','干', '这次','取得','十分','斗','游','继','纳迪','儿','下来','感觉','准备','早','身体','一样','一年','席','年轻','初','嘉','看到','光','蒂','跟','那么','品牌','方面','福','媒体','透','配','赛上','白','价','连续','得分','贾','奥原','否','片', '一局','一场','年全','球友','不会','队员','网前','师兄','这是','运动','大师','国家','全英','世界','亚锦','判','系列','斯里','退','奖','场上','假','雅琼','超级','红','喜','杀','顺','香','一位','伍','遇','错','型','史','神','设','坛','气','眼','吴','问题','满','拿下','去年','拿到','来说','羽球','式','参加','最终','争','敌','雪芮','开始','压','松','森','苏卡','失','思维', '资颖','觉得','波','更多','五','记','作为','其实','门','元','除','比较','为了','显','像','姆','依','领','科','称','市','清晨','防','还有','情况','同时','不能','均','硬','选择','左','走','抓','需要','使用','功','坎','款', '伊', '易','凡','山口','重要','知道','另','刚','州','微','断','由于','不会''透','吧','件', '一直','集','指','逆','形','算','菜','夫','众','呢','谁','穿','段','花', '第三','共','响','余','它','破', '爆','空','热','不同','框','观看','最后','具','调','小编','待','罗','立', '只有','料','只是','靠','她们','这种','般','怎','两人','他们','之前','一定','朗','以及','仍','底','快','今年','半','规', '晋','难','关','希','马来','轮','达','排','牌','头','获','汤','总','东','公开', '明','再','宗伟','衣','原创','约','安','球网','量','制','英赛','允许','做','格','戴','奇','进行','岁','放','情','思','因为','别','少','希望','何','轻', '赛中','克','终','团','较','代','太','周','四','先','纳','迪','如果','还是','完','韩','状','水','这个','路','推','持','顶','表示','美','非','应', '球拍','山','及','星','近','迷','台','这样','费','伤','取','谌','万','则','成为','任','才','使','现在','反','颖','球鞋','曾','又','菲','越','知','脚','向','稳','十','不是','京','品','举','落','穆','届','麦','刘', '入','处','这次''目前','尽','交','胡','口','广','远','足','认为','把','非常', '报','收','青','米','可能','却', '极','之后','需','号','低','随','数','很多','虽然', '所以','区', '程','化', '什么','论','边','各','该','但是','楠','不过','挥','包','哈','黑','见','差','锦标','基','即','往','阿','活','右','风','话','普','且','限','这些','红衣','一点','一些','管','一次','视频','结束','服','谢','办','这一','求','能够','哥','支','质','迎', '今天','时候','突','田','个人','专','真','虽','信','获得','仅','乐','大家','改','档','或','对于','特','列','搭','站','够','雪','几','带','术','第二','续','问','学','每','注','老','色','卡', '郑','连','变','线','视','步','据','长','期','由','未经','系爱羽客','就是','受','尤','严禁','已经','鞋','外','提','部','内','种','给','道','开赛','苏','利','转载','至','望','者','无','等','着','平','些','黄','国','同','时间','一个','相','想','夺','王','项','意','宗','地','正','那','师','法','张','杯','生','超','维','拉','许','锦','金','我们','当','目','陈','加','伟','奥','方','尔','德','龙','胜','西','点','联','尼', '斯','员','进','英','爱','名','合', '网','马','中','林','界','体','新','军','毛','好','成','战','亚','选','开','丹','度','第','高','经','过','男','羽毛','世','打','双','冠','单','女','一','二','三','全','是','么','队','前','场','日','在','李','他','比','首','直','身','心', '不','大','了','有','来','过''为','主','子','上','以','个','爱羽','羽客','定','你','心','系','今','们','的','为','这','对','会','时','出','转','拍','原','我','然','力','后','到','文','人','动','和','分','能','年','手','得','也','本','要','就','很','于','将','都','下','但','小','而','她','更','最','重','还','自','次','之','月','局','说','间','里','两','爱羽客','没','家','用','级','被','并','感','回','让','作','去','位','自己','与','天','看','面','事','因','行','拿','已','其','教','起','从','未','表','强','练','可','多','现','发','组','如','接','没有','可以','性','此','所','本文','赛','球','羽','只'}

jieba.add_word('排名')
jieba.add_word('羽坛')
jieba.add_word('羽球协会')
jieba.add_word('球赛')
jieba.add_word('赛场')
jieba.add_word('赛点')
jieba.add_word('中国')
jieba.add_word('印度')
jieba.add_word('印尼')
jieba.add_word('全英赛')
jieba.add_word('全英公开赛')
jieba.add_word('羽毛球赛')
jieba.add_word('大师赛')
jieba.add_word('资格赛')
jieba.add_word('职业赛')
jieba.add_word('国家羽毛球队')
jieba.add_word('羽联')
jieba.add_word('晋级')
jieba.add_word('单打')
jieba.add_word('双打')
jieba.add_word('女单')
jieba.add_word('女双')
jieba.add_word('男单')
jieba.add_word('男双')
jieba.add_word('冠军')
jieba.add_word('林丹')
jieba.add_word('李宗伟')
jieba.add_word('李龙大')
jieba.add_word('维汀哈斯')
jieba.add_word('李东根')
jieba.add_word('亚锦赛')
jieba.add_word('亚洲锦标赛')
jieba.add_word('中国羽超')
jieba.add_word('中国羽毛球超级联赛')
jieba.add_word('汤姆斯杯')
jieba.add_word('汤杯')
jieba.add_word('尤伯杯')
jieba.add_word('尤杯')
jieba.add_word('苏卡穆约')
jieba.add_word('费尔纳迪')
jieba.add_word('王子维')
jieba.add_word('李俊慧')
jieba.add_word('刘雨辰')
jieba.add_word('刘成')
jieba.add_word('张楠')
jieba.add_word('刘玄炫')
jieba.add_word('郭新娃')
jieba.add_word('郑思维')
jieba.add_word('黄雅琼')
jieba.add_word('王祉怡')
jieba.add_word('陈露')
jieba.add_word('欧烜屹')
jieba.add_word('邓俊文')
jieba.add_word('谢映雪')
jieba.add_word('刘玥')
jieba.add_word('何济廷')
jieba.add_word('渡辺勇大')
jieba.add_word('东野有纱')
jieba.add_word('远藤大由')
jieba.add_word('桃田贤斗')
jieba.add_word('李茵晖')
jieba.add_word('黄东萍')
jieba.add_word('黄凯祥')
jieba.add_word('王懿律')
jieba.add_word('纳西尔')
jieba.add_word('艾哈迈德')
jieba.add_word('山口茜')
jieba.add_word('高桥沙也加')
jieba.add_word('佐藤冴香')
jieba.add_word('福岛由纪')
jieba.add_word('广田彩花')
jieba.add_word('高桥礼华')
jieba.add_word('松友美佐纪')
jieba.add_word('米元小春')
jieba.add_word('田中志穗')
jieba.add_word('戴资颖')
jieba.add_word('何冰娇')
jieba.add_word('高昉洁')
jieba.add_word('奥园希望')
jieba.add_word('陈晓欣')
jieba.add_word('内维尔')
jieba.add_word('辛德胡')
jieba.add_word('因达农')
jieba.add_word('陈雨菲')
jieba.add_word('陈清晨')
jieba.add_word('贾一凡')
jieba.add_word('彼得森')
jieba.add_word('摩根森')
jieba.add_word('安赛龙')
jieba.add_word('科丁')
jieba.add_word('鲍伊')
jieba.add_word('黄东萍')
jieba.add_word('李汶妹')
jieba.add_word('郑雨')
jieba.add_word('张洁雯')
jieba.add_word('杜婧')
jieba.add_word('汤金华')
jieba.add_word('王晓理')
jieba.add_word('唐渊婷')
jieba.add_word('谌龙')
jieba.add_word('石宇奇')
jieba.add_word('斯里坎特')
jieba.add_word('苏卡穆约')
jieba.add_word('费尔纳迪')
jieba.add_word('张宁')
jieba.add_word('谢杏芳')
jieba.add_word('王仪涵')
jieba.add_word('王适娴')
jieba.add_word('李雪芮')
jieba.add_word('马琳')
jieba.add_word('赵芸蕾')
jieba.add_word('辛杜')
jieba.add_word('蒋燕皎')
jieba.add_word('盖德')
jieba.add_word('田厚威')
jieba.add_word('阿尔山尼克')
jieba.add_word('阿山')
jieba.add_word('亨德拉')
jieba.add_word('金佳恩')
jieba.add_word('成池铉')
jieba.add_word('裴延姝')
jieba.add_word('夺冠')
jieba.add_word('里约')
jieba.add_word('奥运')
jieba.add_word('比赛')
jieba.add_word('打法')
jieba.add_word('杀球')
jieba.add_word('跳杀')
jieba.add_word('调球')
jieba.add_word('总决赛')
jieba.add_word('半决赛')
jieba.add_word('金牌')
jieba.add_word('反超')
jieba.add_word('大满贯')
jieba.add_word('英联邦运动会')


for c in sep:
    word = word.replace(c,' ')
wordList=list(jieba.cut(word))
wordDict={}
words=list(set(wordList)-exclude)

for w in range(0,len(words)):
    wordDict[words[w]]=word.count(str(words[w]))

dictList = list(wordDict.items())
dictList.sort(key=lambda x:x[1],reverse=True)
bwc={}
f = open('number.txt', 'a',encoding="utf-8")
for i in range(150):
    print(dictList[i])
    f.write(dictList[i][0] + ':' + str(dictList[i][1]) + '\n')
    bwc[dictList[i][0]]=dictList[i][1]
f.close()

  结果如图所示:

 

 

之后呢,就可以生成词云了,安装wordcloud,可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud进行下载。

找到:

选择合适的版本下载(cp指的是系统上安装的python版本,32表示安装的python版本是32位)。

打开cmd运行,输入pip install wordcloud-1.4.1-cp36-cp36m-win32.whl

安装成功后,写入代码,以及放入你想要的图片,代码以及结果如下:

from PIL import Image,ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator


font=r'C:\Windows\Fonts\simhei.TTF'
image = Image.open('./badminton.png')
graph = np.array(image)
wc = WordCloud(font_path=font,background_color='White',max_words=50, mask=graph)
wc.generate_from_frequencies(bwc)
image_color = ImageColorGenerator(graph)
plt.imshow(wc)
plt.axis("off")
plt.show()

 我选取的图片是:

 

显示结果:

 

 

最后全部源代码如下:

# -*- coding: UTF-8 -*-
# -*- author: wang -*-

import requests
from bs4 import BeautifulSoup
from datetime import datetime
import re

def writeNewsDetail(content):
    f = open('big.txt', 'a', encoding='utf-8')
    f.write(content)
    f.close()

def getListPage(pageUrl): #一个列表页的全部信息
    res=requests.get(pageUrl)
    res.encoding='utf-8'
    soup = BeautifulSoup(res.text, 'html.parser')
    newslist = []
    for news in soup.select('.news_list_box.clearfix'):
        if len(news.select('.desc')) > 0:
            newsUrl = news.select('a')[0].attrs['href']  # 连接
            newslist.append(getNewDetail(newsUrl))
            #  t = news.select('h1')[0].text.strip()  # 标题
    return (newslist)

def getNewDetail(newsUrl):#一篇新闻的详情信息
    resd = requests.get(newsUrl)
    resd.encoding = 'utf-8'
    soupd = BeautifulSoup(resd.text, 'html.parser')
    news = {}  # 用字典存放信息
    news['title'] = soupd.select('h1')[0].text.strip()  # 标题
    news['info'] = soupd.select('.news_from')[0].text.strip().lstrip('来源:')  # 来源
    d = soupd.select('.news_date')[0].text.strip()
    news['dt'] = datetime.strptime(d, '%Y-%m-%d %H:%M:%S')  # 发布时间
    news['comment'] = int(soupd.select('b')[0].text.strip())  # 评论人数
    news['description'] = soupd.select('.news_description')[0].text.strip()  # 描述
    n = soupd.select('#js-news-txtbody')[0].text
    if n.find('本文系爱羽客羽毛球网原创,未经允许严禁转载:') > 0:
        news['content'] = n[:n.find('本文系爱羽客羽毛球网原创,未经允许严禁转载')].strip()
    else:
        news['content'] = n[:n.find('p.declare{')].strip()
    writeNewsDetail(news['content'])
    news['newsUrl'] = newsUrl#链接
    return (news)

pageUrl='http://www.aiyuke.com/view/cate/index.htm'
newstotal=[]
for i in range(1,35):
    listPageUrl='http://www.aiyuke.com/view/cate/index.htm?page={}'.format(i)
    newstotal.extend(getListPage(listPageUrl))

for news in newstotal:
    print(news)

import pandas
df=pandas.DataFrame(newstotal)
df.to_excel('big.xlsx')#导出到Excel表

import jieba
file = open('big.txt', 'r', encoding='utf-8')
word = file.read()
file.close()
sep='''-/.·+—…(),,。:?“”:、;!《》【】1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'''
exclude={' ','\n','\t','\xa0','换','巴','姐','跑','存','居','坦','句','声','背','省','养','慢','班','套', '划','厚','抗','块','纱','恩','翔','昨日','出色','首轮','训练','退赛','直线','尽管','任何','身高','记者','机会','相信','史上','全国','根森','最大','两局','领先','包括','这项', '首局','的话','分钟','很大','体育','如何','不要','客小编','排名第','练习','按','城','掌','利亚','变化','完全','不敌','双方','活动','东野','更是','搭档','赛场','规则','有些','欢迎','赢得','提高','晚', '味','托','括','一种','冷','肯定','工作','其中','追','败','渡边','明显','输','了解','广州','第一','参赛','实现','级赛','代表','闻','不错','报道','决胜','胜局','关注','出球','发展','男队','谈','鞋面','名单','同样','李宁','啊','查','蔡','票','采访','公司','要求','输给','真的','降','秀','宝','随后','有点','其他','容易','正手','膝','吉','勇大','朋友','再次','亮','发现','号种','停','六','留','听','复出','高度','找','目标','博','被动','萨','命','馆','首次','淘','怎么','对角','八','急','一轮','永','字','努力','特别','专业','结果','孙','识','吗','织','掉','球队','准','属','便','面对','最好','对方','救','赞助','级别','赵','野','来自','关键','名将','历史','挑战','提升','保持','整体','南','举办','盖','一下','减','侧','甚至','这么','险','运动员','桃田','病','两个','琳','群','签','确实','抽','继续', '夺得','表现','状态','案','队友','起来','切','一般','接受','住','照','引','岛','比赛','龙大','直接','汉','喜欢','炫','条','应该','头顶','更新','演','试','德拉','塔','妹','运动会','肯','黑衣','拍框','冲','死','主要','队伍','诺','轻松','项目','讨','甚','一起','职业','目前','实力','必须','弹','本次','短','所有','类','流','出现','苦','批','生涯','设计','图','告','笑','志','举行','水平','致','之一', '注意','更好','第二局','二局','比分','缺','遭','离','请','深','置','贤','紧','对手','电','投','装', '率','动作','能力','赛后','组合','球员','资格','士','念','通过','产','一步','而且','如今','负','进入','绝', '曼','球星','直播','除了','久','三局','车','帮','当时','维尔','竟','干', '这次','取得','十分','斗','游','继','纳迪','儿','下来','感觉','准备','早','身体','一样','一年','席','年轻','初','嘉','看到','光','蒂','跟','那么','品牌','方面','福','媒体','透','配','赛上','白','价','连续','得分','贾','奥原','否','片', '一局','一场','年全','球友','不会','队员','网前','师兄','这是','运动','大师','国家','全英','世界','亚锦','判','系列','斯里','退','奖','场上','假','雅琼','超级','红','喜','杀','顺','香','一位','伍','遇','错','型','史','神','设','坛','气','眼','吴','问题','满','拿下','去年','拿到','来说','羽球','式','参加','最终','争','敌','雪芮','开始','压','松','森','苏卡','失','思维', '资颖','觉得','波','更多','五','记','作为','其实','门','元','除','比较','为了','显','像','姆','依','领','科','称','市','清晨','防','还有','情况','同时','不能','均','硬','选择','左','走','抓','需要','使用','功','坎','款', '伊', '易','凡','山口','重要','知道','另','刚','州','微','断','由于','不会''透','吧','件', '一直','集','指','逆','形','算','菜','夫','众','呢','谁','穿','段','花', '第三','共','响','余','它','破', '爆','空','热','不同','框','观看','最后','具','调','小编','待','罗','立', '只有','料','只是','靠','她们','这种','般','怎','两人','他们','之前','一定','朗','以及','仍','底','快','今年','半','规', '晋','难','关','希','马来','轮','达','排','牌','头','获','汤','总','东','公开', '明','再','宗伟','衣','原创','约','安','球网','量','制','英赛','允许','做','格','戴','奇','进行','岁','放','情','思','因为','别','少','希望','何','轻', '赛中','克','终','团','较','代','太','周','四','先','纳','迪','如果','还是','完','韩','状','水','这个','路','推','持','顶','表示','美','非','应', '球拍','山','及','星','近','迷','台','这样','费','伤','取','谌','万','则','成为','任','才','使','现在','反','颖','球鞋','曾','又','菲','越','知','脚','向','稳','十','不是','京','品','举','落','穆','届','麦','刘', '入','处','这次''目前','尽','交','胡','口','广','远','足','认为','把','非常', '报','收','青','米','可能','却', '极','之后','需','号','低','随','数','很多','虽然', '所以','区', '程','化', '什么','论','边','各','该','但是','楠','不过','挥','包','哈','黑','见','差','锦标','基','即','往','阿','活','右','风','话','普','且','限','这些','红衣','一点','一些','管','一次','视频','结束','服','谢','办','这一','求','能够','哥','支','质','迎', '今天','时候','突','田','个人','专','真','虽','信','获得','仅','乐','大家','改','档','或','对于','特','列','搭','站','够','雪','几','带','术','第二','续','问','学','每','注','老','色','卡', '郑','连','变','线','视','步','据','长','期','由','未经','系爱羽客','就是','受','尤','严禁','已经','鞋','外','提','部','内','种','给','道','开赛','苏','利','转载','至','望','者','无','等','着','平','些','黄','国','同','时间','一个','相','想','夺','王','项','意','宗','地','正','那','师','法','张','杯','生','超','维','拉','许','锦','金','我们','当','目','陈','加','伟','奥','方','尔','德','龙','胜','西','点','联','尼', '斯','员','进','英','爱','名','合', '网','马','中','林','界','体','新','军','毛','好','成','战','亚','选','开','丹','度','第','高','经','过','男','羽毛','世','打','双','冠','单','女','一','二','三','全','是','么','队','前','场','日','在','李','他','比','首','直','身','心', '不','大','了','有','来','过''为','主','子','上','以','个','爱羽','羽客','定','你','心','系','今','们','的','为','这','对','会','时','出','转','拍','原','我','然','力','后','到','文','人','动','和','分','能','年','手','得','也','本','要','就','很','于','将','都','下','但','小','而','她','更','最','重','还','自','次','之','月','局','说','间','里','两','爱羽客','没','家','用','级','被','并','感','回','让','作','去','位','自己','与','天','看','面','事','因','行','拿','已','其','教','起','从','未','表','强','练','可','多','现','发','组','如','接','没有','可以','性','此','所','本文','赛','球','羽','只'}

jieba.add_word('排名')
jieba.add_word('羽坛')
jieba.add_word('羽球协会')
jieba.add_word('球赛')
jieba.add_word('赛场')
jieba.add_word('赛点')
jieba.add_word('中国')
jieba.add_word('印度')
jieba.add_word('印尼')
jieba.add_word('全英赛')
jieba.add_word('全英公开赛')
jieba.add_word('羽毛球赛')
jieba.add_word('大师赛')
jieba.add_word('资格赛')
jieba.add_word('职业赛')
jieba.add_word('国家羽毛球队')
jieba.add_word('羽联')
jieba.add_word('晋级')
jieba.add_word('单打')
jieba.add_word('双打')
jieba.add_word('女单')
jieba.add_word('女双')
jieba.add_word('男单')
jieba.add_word('男双')
jieba.add_word('冠军')
jieba.add_word('林丹')
jieba.add_word('李宗伟')
jieba.add_word('李龙大')
jieba.add_word('维汀哈斯')
jieba.add_word('李东根')
jieba.add_word('亚锦赛')
jieba.add_word('亚洲锦标赛')
jieba.add_word('中国羽超')
jieba.add_word('中国羽毛球超级联赛')
jieba.add_word('汤姆斯杯')
jieba.add_word('汤杯')
jieba.add_word('尤伯杯')
jieba.add_word('尤杯')
jieba.add_word('苏卡穆约')
jieba.add_word('费尔纳迪')
jieba.add_word('王子维')
jieba.add_word('李俊慧')
jieba.add_word('刘雨辰')
jieba.add_word('刘成')
jieba.add_word('张楠')
jieba.add_word('刘玄炫')
jieba.add_word('郭新娃')
jieba.add_word('郑思维')
jieba.add_word('黄雅琼')
jieba.add_word('王祉怡')
jieba.add_word('陈露')
jieba.add_word('欧烜屹')
jieba.add_word('邓俊文')
jieba.add_word('谢映雪')
jieba.add_word('刘玥')
jieba.add_word('何济廷')
jieba.add_word('渡辺勇大')
jieba.add_word('东野有纱')
jieba.add_word('远藤大由')
jieba.add_word('桃田贤斗')
jieba.add_word('李茵晖')
jieba.add_word('黄东萍')
jieba.add_word('黄凯祥')
jieba.add_word('王懿律')
jieba.add_word('纳西尔')
jieba.add_word('艾哈迈德')
jieba.add_word('山口茜')
jieba.add_word('高桥沙也加')
jieba.add_word('佐藤冴香')
jieba.add_word('福岛由纪')
jieba.add_word('广田彩花')
jieba.add_word('高桥礼华')
jieba.add_word('松友美佐纪')
jieba.add_word('米元小春')
jieba.add_word('田中志穗')
jieba.add_word('戴资颖')
jieba.add_word('何冰娇')
jieba.add_word('高昉洁')
jieba.add_word('奥园希望')
jieba.add_word('陈晓欣')
jieba.add_word('内维尔')
jieba.add_word('辛德胡')
jieba.add_word('因达农')
jieba.add_word('陈雨菲')
jieba.add_word('陈清晨')
jieba.add_word('贾一凡')
jieba.add_word('彼得森')
jieba.add_word('摩根森')
jieba.add_word('安赛龙')
jieba.add_word('科丁')
jieba.add_word('鲍伊')
jieba.add_word('黄东萍')
jieba.add_word('李汶妹')
jieba.add_word('郑雨')
jieba.add_word('张洁雯')
jieba.add_word('杜婧')
jieba.add_word('汤金华')
jieba.add_word('王晓理')
jieba.add_word('唐渊婷')
jieba.add_word('谌龙')
jieba.add_word('石宇奇')
jieba.add_word('斯里坎特')
jieba.add_word('苏卡穆约')
jieba.add_word('费尔纳迪')
jieba.add_word('张宁')
jieba.add_word('谢杏芳')
jieba.add_word('王仪涵')
jieba.add_word('王适娴')
jieba.add_word('李雪芮')
jieba.add_word('马琳')
jieba.add_word('赵芸蕾')
jieba.add_word('辛杜')
jieba.add_word('蒋燕皎')
jieba.add_word('盖德')
jieba.add_word('田厚威')
jieba.add_word('阿尔山尼克')
jieba.add_word('阿山')
jieba.add_word('亨德拉')
jieba.add_word('金佳恩')
jieba.add_word('成池铉')
jieba.add_word('裴延姝')
jieba.add_word('夺冠')
jieba.add_word('里约')
jieba.add_word('奥运')
jieba.add_word('比赛')
jieba.add_word('打法')
jieba.add_word('杀球')
jieba.add_word('跳杀')
jieba.add_word('调球')
jieba.add_word('总决赛')
jieba.add_word('半决赛')
jieba.add_word('金牌')
jieba.add_word('反超')
jieba.add_word('大满贯')
jieba.add_word('英联邦运动会')


for c in sep:
    word = word.replace(c,' ')
wordList=list(jieba.cut(word))
wordDict={}
words=list(set(wordList)-exclude)

for w in range(0,len(words)):
    wordDict[words[w]]=word.count(str(words[w]))

dictList = list(wordDict.items())
dictList.sort(key=lambda x:x[1],reverse=True)
bwc={}
f = open('number.txt', 'a',encoding="utf-8")
for i in range(150):
    print(dictList[i])
    f.write(dictList[i][0] + ':' + str(dictList[i][1]) + '\n')
    bwc[dictList[i][0]]=dictList[i][1]
f.close()

from PIL import Image,ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator


font=r'C:\Windows\Fonts\simhei.TTF'
image = Image.open('./badminton.png')
graph = np.array(image)
wc = WordCloud(font_path=font,background_color='White',max_words=50, mask=graph)
wc.generate_from_frequencies(bwc)
image_color = ImageColorGenerator(graph)
plt.imshow(wc)
plt.axis("off")
plt.show()

  

 

 

二、遇到的问题及解决办法

1.获取内容的时候,由于文章的标签简单,内容皆为<p>的标签,<style>的内容也会显示出来,如图所示:

这是我们不需要的。那如何去掉呢,发现,有的文章有“本文系爱羽客羽毛球网原创,未经允许严禁转载”这就话,有些文章没有,因此在此运用了条件语句:

    if n.find('本文系爱羽客羽毛球网原创,未经允许严禁转载:') > 0:
        news['content'] = n[:n.find('本文系爱羽客羽毛球网原创,未经允许严禁转载')].strip()
    else:
        news['content'] = n[:n.find('p.declare{')].strip()

  

2.安装词云

通过查看,可以发现自己的python版本是3.6.4-32bit。但是,安装完了之后要导入词云,它提示失败,见图:

我尝试用cmd解压输入pip install worldcloud,但是解压中断了,并且提示:

我按照提示,输入python -m pip install -upgrade pip

咦,,看到更新成功,于是打开项目,看到底下的进度条在加载,心想这次应该可以了吧

可是运行的时候还是会显示错误。接着我再重新装一次,它却提示

emm....???位置不对吗??

那么,我再尝试一次,采取将文件地址拖拉到cmd中,也就是在cmd中输入 pip install 将文件拖到其后面就可以显示其文件地址:

耶我好像看到了希望!!

然而...好像也没多大对劲,worldcloud还是会有红色的下划线。

其实解决方法就是将其设置为全局变量,方法如下:打开项目选择file-->settings...-->project-projiect interpreter右边选择上方长条框,选择Show All...,接着选择System Interpreter ,如图:

选择ok,即可。

温馨提示:初次会出现之前的包没有,再导入一次就可以咯

 

三、数据分析思想及结论。

获取其文章内容并进行词频统计,就可以了解到新闻大体上再报道一些什么内容,近期球赛方面时事、球员的动态,像杀、扣、吊、扑等词可以看到小编也会跟大家剖析职业选手的一些在赛场的表现,解释打球技巧等等,这无疑是羽毛球迷的福利。从统计结果上来看,大部分都是在报道决赛、半决赛的赛事,国际大赛像世锦赛、亚锦赛、全英公开赛、汤杯尤杯、大师赛等都是深受球迷关注的,因此这些词都是词频比较高的。报道球员动态,像选手项目夺冠、还有国际排名、球员明星训练或者回归或者退役等等,像林丹李宗伟这些神话般的人物还在赛场上,同时也会回放他们的精彩时刻,林李大战总是百看不厌,所以他们的词频是特别高的;也重点关注了国家队队员们,从前的新老交替有些变成了新老断层的感觉,例如女单的衰落,王仪涵的退役、李雪芮的伤病,小将们的经验不足等,也会报道台湾香港和国际有名的球员明星例如戴资颖、马琳、因达农、内维尔、山口茜等实力不凡(,因此国内外有名的球员的词频也是会比较高的。有厉害的球员也会伴随着国家名在出现,例如一些羽毛球强国也是经常被报道的,像印尼、日本、韩国、印度、泰国、新加坡、马来西亚、丹麦(其实丹麦这个国家并不是太重视羽毛球,只是队员厉害罢了)等词。

新闻新闻更多的是见闻,不仅喂饱爱好者兴趣,也丰富了我们的眼界。

 

posted @ 2018-04-27 23:01  246王芷玲  阅读(1002)  评论(0编辑  收藏  举报