Python爬取网站小说并可视化分析

举报
王小王-123 发表于 2021/04/20 00:21:19 2021/04/20
【摘要】 时间荏苒,岁月不居,看过四处风景,唯独钟爱,路遥先生的那一句话“人之所以痛苦,在于追求错误的东西,如果你不给自己烦恼,别人也永远不可能给你烦恼”,生活正是如此,一切过多的在意都是自己的想法,有时候就需要活的洒脱一点,学会看淡一点,多看点书,人自然也就变得开明了,事物也就自然看的透彻一点。 读书破万卷、下笔如有神,书中自有黄金屋,书中自有颜如玉,腹有诗书气自华…中国是诗...

时间荏苒,岁月不居,看过四处风景,唯独钟爱,路遥先生的那一句话“人之所以痛苦,在于追求错误的东西,如果你不给自己烦恼,别人也永远不可能给你烦恼”,生活正是如此,一切过多的在意都是自己的想法,有时候就需要活的洒脱一点,学会看淡一点,多看点书,人自然也就变得开明了,事物也就自然看的透彻一点。

读书破万卷、下笔如有神,书中自有黄金屋,书中自有颜如玉,腹有诗书气自华…中国是诗的国度,更是书籍文化的摇篮,书本最是可以提升一个人的气度。那么今天我们就来做一个项目,我把我最喜欢的《人生》这本书数据爬取下来,做一个简单的数据分析,找出一些特点。

话不多述我们开始步入正轨吧!

目标网址

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。