该任务是在大学本科的时候的一个小作业,主要是对湾湾的新闻数据进行一个采集分析与可视化,任务比较简单。任务可分为两个部分,一个是爬取中时新闻网站的数据,二是对该数据进行处理与分析。
一、爬取数据数据:
没有数据,一切等于零。爬取数据我选择的新闻网站时中时,一是因为这是可以少数可以访问到的湾湾的新闻网站。我们想要有针对性的爬取数据,就是要利用该网站的搜索功能。我的逻辑思路是这样的,当输入一个关键词时候,网站自动去匹配整个新闻网的新闻数据,当新闻数据中出现该关键词就会被筛选出来,代码要实现的功能就是去翻页去爬取每页的新闻链接。
爬取的方式也很简单暴力,分两步,第一步先翻页,一页一页抓取网页的链接,第二步,通过这些链接去深度的爬取里面的内容,就相当于点击进去找到里面的正文。上代码:
def spiderbig(name,page):
num=0
hrefs=[]
headers = {
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
}
for i in range(1,page+1):
url = 'https://www.chinatimes.com/Search/'+str(name)+"?"+"page="+str(i)
response = requests.get(url, headers=headers, timeout=600)
html = etree.HTML(response.text)
# hrefs = html.xpath('//div[@class="category"]/a/text()')
lables = html.xpath('//div/div[@class="category"]/a/text()')
# print(lables)
for i in range(1,len(lables)+1):
if lables[i-1]!=None:
ptah='//li['+str(i)+']/div/div/div[2]/h3[@class="title"]/a/@href'
href= html.xpath(ptah)
hrefs=href+hrefs
num+=1
print("此类新闻共"+str(num)+'条')
return hrefs
这是第一步,先用python爬取大标题链接,给他命名为spiderbig函数,英文不好就暂且这样吧。觉得比较简单的代码了,也比较好好理解。
url = 'https://www.chinatimes.com/Search/'+str(name)+"?"+"page="+str(i)
#通过尝试发现网站的规律 str(name)是输入进来的关键词 str(i)是为了翻页
之后就是通过最常规的request、etree代码,最后用xpath去定位,所有的爬虫觉得差不多都是这样。之后进入下一步,该函数已经把搜索到的所有新闻数据的网址进行了搜集,我们需要干的就是进一步通过这些网址,去爬取正文。
def spiderdeep(url):
headers = {
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
}
print("爬取网页:"+url)
response = requests.get(url, headers=headers, timeout=600)
html = etree.HTML(response.text)
# print(response.text)
key=html.xpath('//div[@class="article-hash-tag"]/span/a/text()')
title =html.xpath('//h1[@class="article-title"]/text()')
content=html.xpath('//div[@class="article-body"]/p/text()')
time= html.xpath('//header/div/div[1]/div/div/time/span[2]/text()')
print(title,key,time)
return title,content,key,time
有了spiderbig,但不一定有spidersmall。对新闻网址进行深度的爬取,爬取的内容有新闻的标题(title),正文(content),关键词(key),时间(time)。对应的xpth路径可以去看看,我就不给大家展示了。
二、 数据处理与可视化:
主要涉及有两个部分进行联动展示,一个是把地名当成关键词,爬取所有和当地有关的新闻数据进行分析。用的就是普通的html和echarts工具做的简单的大屏。
联动的可视化,当点击湾湾的某个市时,左面的词云图和右面的饼图都会进行更新,显示出该市新闻的关键词和该市新闻的分类,中间的湾湾热力图则展示了各个市新闻数量的多少。
第二部分是对湾湾人物名字当成关键词,爬取所有和该人物有关的新闻数据进行分析。如下图所示,中间的有许多湾湾的关键人物图片的蓝绿黑分别代表不同团队,点击某个人物也会进行一系列的联动,右边的饼图代表与他有关新闻的一个分类。
审美能力不高,能出结果就行,处理新闻数据的代码后续再写,包括对新闻数据的关键词提取,情感分析。不足之处请大家批评指正,谢谢大家。