【python】python小说数据抓取+可视化(源码+数据)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【python】python小说数据抓取+可视化(源码+数据)【独一无二】



一、功能描述

主要采集是创世中文网,网页中主要功能如下:

  1. 爬取小说信息: 通过循环遍历预设的小说类型和页数,使用requests库发送HTTP请求获取每一页小说信息的HTML页面,然后解析库提取页面中的小说标题、等级、类型、字数和简介等信息,并保存到Excel文件中。

  2. 数据清洗和转换: 读取Excel文件中的数据,对字数进行单位统一和异常处理,确保数据的准确性和一致性。

  3. 数据可视化: 绘制多种图表,包括散点图、折线图、柱状图、饼图和词云图,展示了小说数据的不同特征和分布情况,如小说等级与字数的关系、小说标题长度与字数的关系、不同类型小说的总字数和数量分布、每种类型小说的平均字数以及字数最多的前15篇小说等。

  4. 提供数据分析: 通过观察和分析生成的图表,用户可以更直观地了解小说数据的特征和规律,例如不同类型小说的数量和字数分布情况,以及字数最多的小说等。这些分析有助于用户做出进一步的决策或研究。

在这里插入图片描述

数据抓取内容如下,主要采集了 2000+ 条数据,保存到excel文件中:

在这里插入图片描述

👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈

爬取内容显示如下:

在这里插入图片描述


二、可视化展示

  1. 折线图:名字最长的前10篇小说的字数
    • 通过 plt.plot() 函数绘制折线图,横轴为前10篇小说的标题,纵轴为字数(单位为万字)。
    • 通过 plt.xticks() 函数设置横坐标的旋转角度和对齐方式,使得标题能够清晰显示。
    • 通过 plt.title() 函数设置图表标题,plt.ylabel() 函数设置纵坐标标签,plt.tight_layout() 函数调整布局,最后使用 plt.show() 函数显示图表。

在这里插入图片描述

在这里插入图片描述

👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈

  1. 柱状图:类型 vs 总字数
    • 首先使用 groupby() 函数按照小说类型对数据进行分组,然后使用 sum() 函数计算每种类型小说的总字数。
    • 通过 plot(kind='bar') 函数绘制柱状图,横轴为小说类型,纵轴为总字数(单位为万字)。
    • 同样使用 plt.title() 函数设置图表标题和纵坐标标签,最后使用 plt.show() 函数显示图表。

在这里插入图片描述

  1. 饼图:小说类型分布
    • 使用 value_counts() 函数统计每种小说类型的数量。
    • 通过 plot(kind='pie') 函数绘制饼图,展示不同类型小说的数量占比。
    • 使用 autopct='%1.1f%%' 参数显示每个扇形的百分比标签,并通过 plt.title() 函数设置图表标题,最后使用 plt.show() 函数显示图表。

在这里插入图片描述

👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈

  1. 柱状图:类型 vs 平均字数
    • 使用 groupby() 函数按照小说类型对数据进行分组,然后使用 mean() 函数计算每种类型小说的平均字数。
    • 通过 plot(kind='bar') 函数绘制柱状图,横轴为小说类型,纵轴为平均字数(单位为万字)。
    • 使用 plt.title() 函数设置图表标题和坐标轴标签,最后使用 plt.show() 函数显示图表。
      在这里插入图片描述
  2. 柱状图:字数最多的前15篇小说
    • 使用 nlargest() 函数选择字数最多的前15篇小说。
    • 通过 plt.bar() 函数绘制柱状图,横轴为小说标题,纵轴为字数(单位为万字)。
    • 使用 plt.title() 函数设置图表标题和坐标轴标签,通过 plt.xticks() 函数设置横坐标标签的旋转角度和对齐方式,最后使用 plt.show() 函数显示图表。
      在这里插入图片描述
  3. 词云图:标题
    • 使用 WordCloud 库生成词云图,通过 generate() 函数传入小说标题数据,生成词云图。
    • 通过 plt.imshow() 函数显示词云图,使用 interpolation='bilinear' 参数设置插值方法,使图像更加平滑。
    • 最后通过 plt.axis('off') 函数关闭坐标轴,plt.title() 函数设置图表标题,最后使用 plt.show() 函数显示词云图。
      在这里插入图片描述

👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈

三、部分代码

import time
import requests
from lxml import etree
import csv
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud

plt.rcParams["font.sans-serif"]=["SimHei"]


def save_data(data_list):
    # 使用'utf-8-sig'编码来确保UTF-8文件可以正确地读取中文字符
    # 略...
    # 略...
        # 略...
            # 略...
                # 略...
                    # 略...
                        # 略...> 👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈
# 爬取url集合
url_dic = {
	# 略....
	# 略....
	# 略....	# 略....> 👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈
	# 略....	# 略....
	# 略....	# 略....
	# 略....	# 略....
	# 略....
}

header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
}
save_data(["标题", "等级", "类型", "字数 ", "简介"])  # 标题
for url, page in url_dic.items():

    for i in range(1, page + 1):
            time.sleep(2)
            nurl = url + str(i)
            html = requests.get(url=nurl, headers=header)
            for k in range(1, 20):
                try:
                    # 提取页面信息
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # > 👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                    # 略。。。。。。
                except:
                    print("异常页数,已经略过...")
                    continue

time.sleep(3)

# 读取数据
df = pd.read_csv('noval_data1.csv')
# 首先进行替换(数据清洗)
df['字数 '] = df['字数 '].str.replace('万字', '', regex=False)


# 然后进行转换(数据处理)
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
# 略。。。。。。
> 👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈

df['字数 '] = df['字数 '].apply(convert_to_wan)


# 散点图:等级 vs 字数
plt.figure(figsize=(10, 6))
for level in df['等级'].unique():
    plt.scatter(df[df['等级'] == level]['等级'], df[df['等级'] == level]['字数 '], label=level)
plt.title("散点图:等级 vs 字数")
plt.ylabel("字数(万字)")
plt.legend()
plt.show()

# 根据标题的长度进行排序并选取前10篇
top_10_longest_titles = df.sort_values(by='标题', key=lambda x: x.str.len(), ascending=False).head(10).copy()

# 折线图:按标题的字数
plt.figure(figsize=(10, 6))
plt.plot(top_10_longest_titles['标题'], top_10_longest_titles['字数 '], marker='o')
plt.title("折线图:名字最长的前10篇小说的字数")
plt.xticks(rotation=45, ha='right')
plt.ylabel("字数(万字)")
plt.tight_layout()
plt.show()

# 柱状图:按类型的总字数
type_sum = df.groupby('类型')['字数 '].sum()
type_sum.plot(kind='bar', figsize=(10, 6))
plt.title("柱状图:类型 vs 总字数")
plt.ylabel("字数(万字)")
plt.show()

# 饼图:每个类型的小说数量
type_counts = df['类型'].value_counts()
type_counts.plot(kind='pie', figsize=(8, 8), autopct='%1.1f%%')
plt.title("饼图:小说类型分布")
plt.ylabel("")
plt.show()

# 根据类型计算平均字数
avg_word_by_type = df.groupby('类型')['字数 '].mean()

# 柱状图:类型 vs 平均字数
plt.figure(figsize=(10, 6))
avg_word_by_type.plot(kind='bar', color='skyblue')
plt.title("柱状图:类型 vs 平均字数")
plt.ylabel("平均字数(万字)")
plt.xlabel("小说类型")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

> 👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈

# 选择字数最多的前15篇小说
top_15_by_word_count = df.nlargest(15, '字数 ')

# 柱状图:标题 vs 字数
plt.figure(figsize=(12, 8))
plt.bar(top_15_by_word_count['标题'], top_15_by_word_count['字数 '], color='teal')
plt.title("柱状图:字数最多的前15篇小说")
plt.ylabel("字数(万字)")
plt.xlabel("小说标题")
plt.xticks(rotation=90)
plt.tight_layout()
plt.show()


# 词云图:标题
wordcloud = WordCloud(font_path=r'msyh.ttc', width=800, height=400, background_color='white').generate(' '.join(df['标题']))
plt.figure(figsize=(10, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title("词云图:标题")
plt.show()

👉👉👉源码关注【测试开发自动化】公众号,回复 “ 小说数据抓取 ” 获取。👈👈👈

  • 15
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python股票数据爬虫分析可视化框架有很多选择,下面我会介绍其中几个比较流行的框架。 1. BeautifulSoup:BeautifulSoup是一个强大的HTML/XML解析库,可以用来爬取网页上的股票数据。它提供了简单的API来遍历和搜索HTML/XML文档树,使得爬取股票数据变得相对简单。虽然BeautifulSoup本身并不提供数据分析和可视化的功能,但可以结合其他Python库,如Pandas和Matplotlib等进行进一步的数据分析和可视化。 2. Scrapy:Scrapy是一个功能强大的Python爬虫框架,它提供了丰富的特性和工具,使得构建复杂的爬虫变得简单。使用Scrapy可以方便地定义爬虫的规则和流程,通过XPath或CSS选择器等方式抓取股票数据。类似于BeautifulSoup,Scrapy本身并不提供数据分析和可视化功能,但可以结合其他库进行进一步的分析和可视化。 3. Pandas:Pandas是一个用于数据处理和分析的库,它提供了高效的数据结构和数据分析工具。可以使用Pandas读取和处理从网页爬取得到的股票数据,进行数据清洗、转换和分析。Pandas还集成了Matplotlib和Seaborn等可视化库,可以用来绘制各种类型的图表和可视化结果。 4. Matplotlib:Matplotlib是一个用于绘制2D图表和可视化数据的库。在股票数据分析中,可以使用Matplotlib来绘制股票走势图、K线图、柱状图等各种图表,直观地展示股票数据的变化情况。 总而言之,以上是几个常用的Python股票数据爬虫分析可视化框架。根据具体的需求和个人偏好,选择适合自己的框架进行开发和使用。这些框架在数据爬取、处理、分析和可视化方面都具有优势,可以帮助我们更好地理解和分析股票数据。 ### 回答2: Python股票数据爬虫、分析和可视化是金融领域中常见的应用之一。在这个过程中,我们使用Python编程语言以及相关的库和框架来从互联网上获取股票数据,对数据进行分析,并将结果可视化展示出来。 首先,我们需要使用Python中的爬虫工具来从网站上爬取股票数据。常用的爬虫库包括Requests和BeautifulSoup。使用这些库,我们可以向股票数据提供网站发送HTTP请求,并根据网站的HTML结构提取所需的数据。 然后,我们可以使用Python中的数据分析库如Pandas、NumPy和SciPy来对股票数据进行处理和分析。这些库提供了灵活强大的数据结构和函数,可以进行数据清洗、数据计算以及统计分析等操作。我们可以使用这些库来计算股票的收益率、波动性、相关性等指标,从而帮助我们更好地理解股票市场的情况。 最后,我们可以使用Python中的可视化库如Matplotlib和Seaborn来将分析结果呈现出来。这些库提供了各种绘图函数和样式,可以绘制折线图、柱状图、散点图等不同类型的图表。通过可视化,我们可以更直观地观察和分析股票数据的趋势和变化,帮助我们做出更明智的投资决策。 总而言之,Python股票数据爬虫、分析和可视化框架给予我们在金融领域中研究和应用股票数据的能力。通过这个框架,我们可以轻松地从互联网上获取股票数据,对数据进行分析,并通过可视化展示出来,从而更好地理解和利用股票市场的信息。 ### 回答3: 对于股票数据的爬虫、分析和可视化处理,Python提供了多个强大的框架。以下是其中几个常用的框架和库: 1. BeautifulSoup:用于从网页中提取数据的库。通过解析HTML文档,可以方便地提取股票数据。 2. Scrapy:一个高效的网络爬虫框架,适用于大规模的数据爬取。可以用于爬取多个股票网站的数据。 3. Pandas:一个流行的数据处理和分析库。可以使用Pandas加载股票数据并进行数据清洗、分析、转换和计算。 4. NumPy:一个用于科学计算的库。在股票数据分析中,NumPy提供了针对数组和矩阵运算的丰富功能。 5. Matplotlib:一个绘图库,用于生成各种类型的图形。可以使用Matplotlib创建股票历史价格趋势图、K线图等可视化结果。 6. Seaborn:基于Matplotlib的库,用于创建更美观的统计图表。Seaborn可以用于创建股票收益率分布图、相关性矩阵等。 7. Plotly:一个交互式的可视化库,可以创建基于Web的动态图表。通过Plotly,可以创建可交互的股票走势图和K线图等。 使用这些框架和库,可以通过Python实现全流程的股票数据爬取、分析和可视化处理。首先,使用爬虫框架(如BeautifulSoup或Scrapy)爬取股票数据;然后,使用Pandas和NumPy进行数据处理和分析;最后,使用Matplotlib、Seaborn或Plotly将分析结果可视化呈现。这样,可以得到直观、清晰的图表,帮助用户更好地理解股票数据的变化和趋势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米码收割机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值