爬虫大作业
1.选一个自己感兴趣的主题(所有人不能雷同)。
答:本次我选择的主题是爬去广州大学的“广大要闻”,工有333页,每页有20条新闻。
2.用python 编写爬虫程序,从网络上爬取相关主题的数据。
答:第一,首先打开广州大学的新闻页:http://news.gzhu.edu.cn/guangdayaowen/,看到此页有20条新闻,获取总的新闻页数的代码实现如下:
#获取文章总页数 def getCount(url): res = requests.get(url) res.encoding = 'utf-8' soup = BeautifulSoup(res.text, 'html.parser') count = soup.select('.epages')[0].select("a")[0].text print(count) return count
3.对爬了的数据进行文本分析,生成词云。
答:第一,将获取的新闻内容,存到文本里面去:
第二,将所获取到的新闻内容,插入图片,生成一张词云图:
4.对文本分析结果进行解释说明。
答:文本获取到的字符信息并不是我们想要的效果,因此,为了达到我们想要的效果,我就将所获取到的文本信息,生成一个词云图,这样我们就可以比较直观地看出,广州大学地新闻网地信息主要在强调些什么,从而达到此次爬取的目的。
5.写一篇完整的博客,描述上述实现过程、遇到的问题及解决办法、数据分析思想及结论。
答:在做这个大作业的过程中,我遇到了一下的一些问题和寻找解决办法:
第一,在是先这个完整的爬取过程,遇到的最大的问题就是在那个获取页面的总页数上,由于我学习还不深入,因此在这里停顿了好久,想不到很好的解决办法去解决这个问题,后来就去请教同学,在同学的帮助下,我成功的将自己所遇到的问题成功解决了。
第二,遇到的第二个问题,就是在安装生成词云的时候,导入有错误,因为不知道自己的python是多少位的,就胡乱下载错了,如:
后来选择合适的版本即:cp-36-cp-36m-win32.whl版本的来下载,cp指的是系统上安装的python版本,32表示安装的python版本是32位,不是操作系统
打开cmd运行,切换到指定目录运行
执行以下命令
pip install wordcloud-1.3.3-cp36-cp36m-win32.whl pip install wordcloud
最后就安装成功了。
6.最后提交爬取的全部数据、爬虫及数据分析源代码。
# -*- codding: UTF-8 -*- # -*- author: WF -*- import requests from bs4 import BeautifulSoup from util.expretion import filter_tags import time baseUrl="http://news.gzhu.edu.cn" url =baseUrl+ "/guangdayaowen/index.html" def writeNewDetail(content): f = open('GZCCnews.txt','a',encoding='utf-8') #a是添加add的意思 f.write(content) f.close() # def getList(url): linkList=[] res = requests.get(url) res.encoding = 'utf-8' soup = BeautifulSoup(res.text,'html.parser') list = soup.select('.news_list')[0].select("table")[1].select("li") for i in list: if len(i.select('a')) > 0: # 排除为空的li list1 = i.select('a')[0].attrs['href'] print(list1) linkList.append(list1) print("*******************分页************************") return (linkList) #获取文章总页数 def getCount(url): res = requests.get(url) res.encoding = 'utf-8' soup = BeautifulSoup(res.text, 'html.parser') count = soup.select('.epages')[0].select("a")[0].text print(count) return count #获取一篇文章详情 def getNewDetail(url): detail_res = requests.get(url) detail_res.encoding = 'utf-8' detail_soup = BeautifulSoup(detail_res.text, 'html.parser') # 打开新闻详情页并解析 title=detail_soup.select(".title_info")[0].select("h1")[0].text text=detail_soup.select("#text") comment= filter_tags(str(text)) return comment #获取一页的文章详情 def getPageDetail(linkList): for item in linkList: comment = getNewDetail(baseUrl + item) writeNewDetail(comment) if __name__ == '__main__': count=getCount(url) for item in range(1,int(count)+1): linkList = [] if(item==1): linkList = getList(url) else: linkList = getList(baseUrl+"/guangdayaowen/index" + "_" + str(item) + ".html") getPageDetail(linkList) print("第:"+str(item)+"页") time.sleep(1) #生成词云 # -*- codding: UTF-8 -*- # -*- author: WF -*- import jieba import matplotlib.pyplot as plt from wordcloud import WordCloud, ImageColorGenerator import codecs import numpy as np from PIL import Image import re file = codecs.open('GZCCnews.txt', 'r', 'utf-8') image=np.array(Image.open('D:/pythonWork/a.jpg')) font=r'C:\Windows\Fonts\simkai.ttf' word=file.read() #去掉英文,保留中文 resultword=re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\!\@\#\\\&\*\%]", "",word) wordlist_after_jieba = jieba.cut(resultword, cut_all = True) wl_space_split = " ".join(wordlist_after_jieba) print(wl_space_split) my_wordcloud = WordCloud(font_path=font,mask=image,background_color='black',max_words = 100,max_font_size = 300,random_state=50).generate(wl_space_split) #根据图片生成词云 iamge_colors = ImageColorGenerator(image) my_wordcloud.recolor(color_func = iamge_colors) #显示生成的词云 plt.imshow(my_wordcloud) plt.axis("off") plt.show() #保存生成的图片,当关闭图片时才会生效,中断程序不会保存 my_wordcloud.to_file('result.jpg')
总结:第一,这次的爬取数据,主要是爬取广州大学的校园新闻,让我们能更进一步地了解到其他校园的校园新闻,获取其他学校的信息,来对比我们学校与其学校的异同之处。
第二,通过这次的爬虫经历,使我进一步了解pathon的语法的使用,让我学会了如何去爬取自己所需要的数据。同时,我还可以将所爬到的数据生成成词云,进一步直观地看到所爬取出来的数据。
第三,更深的感受是,还是要多练习,多思考,遇到不懂的地方可以虚心地向有经验的同学请教。