Python爬取网站小说并可视化分析
时间荏苒,岁月不居,看过四处风景,唯独钟爱,路遥先生的那一句话“人之所以痛苦,在于追求错误的东西,如果你不给自己烦恼,别人也永远不可能给你烦恼”,生活正是如此,一切过多的在意都是自己的想法,有时候就需要活的洒脱一点,学会看淡一点,多看点书,人自然也就变得开明了,事物也就自然看的透彻一点。
读书破万卷、下笔如有神,书中自有黄金屋,书中自有颜如玉,腹有诗书气自华…中国是诗的国度,更是书籍文化的摇篮,书本最是可以提升一个人的气度。那么今天我们就来做一个项目,我把我最喜欢的《人生》这本书数据爬取下来,做一个简单的数据分析,找出一些特点。
话不多述我们开始步入正轨吧!
目标网址
https://www.cz2che.com/0/175/7710.html
- 1
这个网站收集了很多优秀书籍,还有诗词典故,中外名著,在里面你可以找到属于你自己的那一本书,静静的的享受文字的魅力…
解析网址
我们爬取的时候首先必须要搭建自己框架,至于有些网站它会有一些反爬技术,有一些内容会被加密,那么我们去解析的时候要根据网站的特点去解密,收集数据,不断的去测试,反复的优化我们的代码,这样才能达到一定的效果。本次的代码设计具有可移植的效果,只是有些文本需要自己的去按照正则表达式或Xpath或beautifulsoup这些解析方法来匹配数据。
我这里用到的一个使我们最为常用的一个解析库-Xpath,它具有简单,易懂的特点,但是对于有一些动态的网站,那么就有一点棘手了,这个时候我们要根据自己的目标网址来选取。
好了前期工作我们都准备好了,那么我们现在就要按照我们爬虫的思路开始吧!
请求网址
headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36' } res=requests.get(url=url,headers=headers) # print(res.encoding) res.encoding='GBK' html=res.text # print(html) html_=etree.HTML(html) # print(html_) text=html_.xpath('//div[@class="panel-body content-body content-ext"]//text()') # text.remove(" ")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
爬虫不可缺少的:
第一步:
伪装头,伪装pycharm成为浏览器,去请求网址内容,利用headers做一个参数
第二步:
编码格式,是要知道这个网址的编码是什么,这个是我们有时候最为忽视的一步,那么我们如何知道这个网址的编码是什么呢?
在console控制台输入document.charset 然后回车,如图:
第三步:
解析网址,我们最为常用的就是,Xlxm这个库,首先返回这个网址的源码的文本格式,然后我们利用html_=etree.HTML(html),html就是文本参数,我们解析把这个网页的源码解析好之后,就开始匹配数据了。
仅作为参考,网页时刻在发生变化
text=html_.xpath('//div[@class="panel-body content-body content-ext"]//text()')
- 1
这个每次返回的是一个列表,我们根据段落的特点把数据存储下来,那么我们的爬取数据就简单的完成了。
写入文件
num=len(text) for s in range(num): file.write(text[s]+'\n')
- 1
- 2
- 3
这里按照段落特点写入到我们的txt格式里面。当然这里我们只是爬取了第一章,那么我们如何爬取整本书,就需要对网页做进一步的分析了,我们观察发现,我们第一章和第二章网址差别就是里面的某一个参数发生了改变:
https://www.cz2che.com/0/175/7713.html
- 1
https://www.cz2che.com/0/175/7714.html
- 1
那么这样就比较方便了,我们每次循环请求的时候,只需要改变这一个参数即可,我们利用format来解决这个,之前有童鞋问道format感觉很少用到,哈哈哈,我只想说一句“书到用时方恨少”
利用beautifulsoup爬取过程
现在我们完全爬取结束了!!
分析数据
获取到了一本书的数据,我们最先想到的就是我们利用jieba库进行中文分词,最后去统计文章里面出现的词组频次,最后排序输出,生成词云图,达到可视化的要求。
那么下面我们就开始读取数据,分词,统计,可视化了…
a=file.read() b=jieba.lcut(a)
- 1
- 2
至于jieba库我们经常用到的就是这一个语法知识,对于jieba库的操作,我们的计算机二级也是有一定的要求和了解的。
那么我们如何去除掉文章里面的大量的标点符号,我们就需要利用到for循环的in操作;
去除掉我们标点符号,最终按照我们的标准统计法对我们的词组进行统计
代码如下:
with open(r"人生.txt", encoding="utf-8") as file: a=file.read() b=jieba.lcut(a) for x in b: if x in ",。、;:‘’“”【】《》?、.!… ": continue else: if len(x)==1: ll.append(x) elif len(x)==2: lg.append(x) elif len(x)==3: lk.append(x) else: lj.append(x) with open(r"数据分析.txt", "w", encoding="utf-8") as f: for word in lj:#如果想要统计其他字符长度的,只需要换一个变量即可 d[word] = d.get(word, 0) + 1 ls = list(d.items()) ls.sort(key=lambda x: x[1], reverse=True) for i in range(10): print(ls[i][0]) for a in ls: # new_word=a[0] +' '+str(a[1]) new_word=a[0] f.write(new_word+'\n')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
得到本书中四字词语的出现最多的次数:
总结
1.爬取数据
2.存储数据
3.分析数据
最后我们利用词云图把这个可视化呈现给用户:
效果展示
本次爬取的代码具有可移植性,对该网站的所有书籍都可行,本文只提供思路,需要源码的可以私信我!
每文一语
每一次的学习和积累都是最好的安排,不要抱怨美好为何迟迟不到,只要坚持,美好总是与你不期而遇!
文章来源: blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_47723732/article/details/109248600
- 点赞
- 收藏
- 关注作者
评论(0)