python爬取三国演义文本,统计三国演义中出场次数前30的人物,并生成词云、图表

使用Python爬取三国演义文本,通过数据分析统计出出场次数最多的前30位人物,并利用jieba进行中文分词,结合wordcloud生成词云图及matplotlib绘制人物出场次数柱状图。最终结果显示曹操出场次数最多,揭示了数据背后的有趣事实。
摘要由CSDN通过智能技术生成

1.目标

python爬取三国演义,生成词云、图表

2.码前须知

项目目标:三国人物名称及出现次数-----数据统计分析
提出问题:哪个人物在三国演义中出现的次数最多?,我们希望通过数据分析来获得答案。
分析工具:pandas,Matplotlib
pip install bs4
pip install lxml
pip install pandas
pip install Matplotlib

bs4数据解析必备知识点:标签定位,提取标签中的数据值
1.实例化一个BeautifulSoup对象,并将页面源码数据加载到该对象中,lxml是解析器,固定的参数,下面是举例
#本地html加载到该对象:
fp = open(’./test.html’,‘r’,encoding=‘utf-8’)
soup = BeautifulSoup(fp,‘lxml’)
print(soup)
#互联网上获取的源码数据(常用)
page_text = response.text
soup = BeautifulSoup(page_text,‘lxml’)
2.通过调用BeautifulSoup对象中相关的属性或者方法对标签进行定位和提取
bs4具体属性的用法
1.标签 ,如< p > < a >< div >等等
soup.tagName
例如
soup.a #返回的是html第一次出现的tagName的a标签
soup.div #返回的是html第一次出现的tagName的div标签

2.查找
soup.find(‘div’) 用法相当于soup.div
属性定位, < div class=‘song’ >
soup.find(‘div’,class_=‘song’) class_需要带下划线
class_/id/attr

3.所有符合条件的标签
soup.find_all(‘a’) #返回符合所有的a标签,也可以属性定位

4.select放置选择器 类选择器. .代表的就是tang
soup.select(’.tang’)
soup.select(‘某种选择器(id,class,标签,选择器)’)
返回的是一个列表
定位到标签下面的标签 >表示标签一个层级选择器
soup.select(’.tang > ul >li >a’[0])
空格表示多级选择器
soup.select(‘tang’ > ul a’[0]) 与上述的表达式相同

常用层级选择器
5.获取标签中间的文本数据
soup.a.text/string/get_text()
区别
text/get_text():可以获取某一个标签中所有的文本内容,即使不是直系的文本
string:只可以获取直系文本

6.获取标签中的属性值
soup.a[‘href’] 相当于列表操作

3.操作流程

1.爬取数据来源: 古诗词网《三国演义》
2.编码流程:

  • 指定URL–http://www.shicimingju.com/book/sanguoyanyi.html
  • 发起请求–requests
  • 获取响应数据—页面信息
  • 数据解析(通过bs4) --1进行指定标签的定位;2取得标签当中的文本内容
  • 持久化存储–保存文件

2.文本词频统计:中文分词库–jieba库,具体的解释已在代码处声明
3.生成词云:wordcloud,具体的解释已在代码处声明
4.生成柱状分析图:matplotlib,具体的解释已在代码处声明

–url首页
在这里插入图片描述

–我们要的是这个目录的标题和点击后的页面内容
在这里插入图片描述

点击后的页面,发现规律
在这里插入图片描述

详细页面要获取的内容
在这里插入图片描述

4.完整代码

from bs4 import BeautifulSoup
import requests
import jieba#优秀的中文分词第三方库
import wordcloud
import pandas as pd 
from matplotlib import pyplot as plt

#1.对首页html进行爬取
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
headers={
   
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
    }
fp = open('./sanguo.txt','w',encoding='utf-8')
page_text = requests.get(url=url,headers=headers).text

#2.数据解析
#实例化对象
soup = BeautifulSoup(page_text,'lxml')
#获得li标签
li_list = soup.select('.book-mulu > ul > li')
#取得li标签里的属性
for li in li_list:
    #通过bs4的方法直接获取a标签直系文本
    title = li.a.string
    #对url进行拼接得到详情页的url
    detail_url = 'http://www.shicimingju.com'+li.a['href']
    #对详情页发起请求
    detail_page_text = requests.get(url=detail_url,headers=headers).text
    #解析详情页的标签内容,重新实例化一个详情页bs对象,lxml解析器
    detail_soup = BeautifulSoup(detail_page_text,'lxml')
    #属性定位
    div_tag = detail_soup.find('div',class_='chapter_content')
    #解析到了章节的内容,利用text方法获取
    content = div_tag.text
    #持久化存储
  
  • 9
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值