如何使用Python优化爬虫和数据可视化

你是否曾经想过如何从Bilibili网站上获取有关UP主的信息,并将其可视化呈现出来?本教程将向你展示如何使用Python、Selenium、Pandas和Matplotlib优化你的爬虫数据可视化流程,以更轻松地收集和分析数据。

前言

在这个信息爆炸的时代,我们有许多方法来获取数据。而对于喜欢Bilibili的用户来说,UP主的粉丝数量和内容质量是非常关键的信息。我们将使用Python编程语言来自动抓取Bilibili上UP主的信息,并通过数据可视化来更好地理解这些数据。

准备工作

在开始之前,确保你已经安装了以下Python库:

  • Pandas:用于数据处理和分析。
  • Matplotlib:用于数据可视化。
  • Selenium:用于网页自动化操作。

你还需要下载Microsoft Edge浏览器驱动,确保与你的浏览器版本相匹配。现在,让我们开始吧!

第一步:设置环境

首先,让我们设置Python环境并导入必要的库:

import pandas as pd
import matplotlib.pyplot as plt
from selenium import webdriver
from selenium.webdriver.common.by import By
import pinyin

在这里,我们导入了所需的库,包括Pandas用于数据处理、Matplotlib用于可视化、Selenium用于网页自动化操作以及pinyin用于处理拼音。

第二步:设置中文显示

由于我们将处理中文字符,我们需要设置Matplotlib以正确显示中文字符:

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

这将确保你的可视化图表中可以正确显示中文。

第三步:编写辅助函数

在进行爬取和数据处理之前,我们将编写一些辅助函数来处理文字数据:

def getStrAllAlpha(string):
    return pinyin.get_initial(string, delimiter="").upper()

def getStrFirstAlpha(string):
    string = getStrAllAlpha(string)
    string = string[0:1]
    return string.upper()

这两个函数将用于将UP主的名字转换为拼音,并提取首字母,以便后续的数据整理。

第四步:爬取UP主信息

现在,让我们开始爬取Bilibili上UP主的信息。我们将使用Selenium来自动化这个过程。首先,设置Bilibili的搜索页面URL:

url = "https://search.bilibili.com/upuser?keyword=mc&from_source=webtop_search&spm_id_from=333.1007&order=fans"

接下来,设置浏览器的User-Agent,以模拟用户操作:

header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36'}
opt = webdriver.EdgeOptions()
opt.add_argument('--user-agent=%s' % header)
edge = webdriver.Edge(options=opt)

然后,让浏览器打开Bilibili的搜索页面:

edge.get(url)

现在,我们准备开始爬取UP主信息。我们将循环爬取100个UP主的名字和粉丝数量,并将它们存储在两个列表中:

name_list = []
people_list = []

for i in range(1, 101):
    try:
        # 使用XPath定位UP主信息
        li = edge.find_element(by=By.XPATH, value='//*[@id="user-list"]/div[1]/ul/li[' + str(i) + ']')
        txt = li.text
        name = txt.split("\n")[0].split("+")[0]
        people = txt.split("\n")[2].split(":")[1].split("万")[0]
        name_list.append(name)
        people_list.append(float(people))
        print(name, people)
    except:
        print("切页")
        # 点击下一页按钮
        button = edge.find_element(by=By.XPATH, value='//*[@id="user-list"]/div[1]/div[2]/div/ul/li[' + str(page) + ']/button').click()
        page += 1

这个循环将遍历100个UP主的信息,并将它们存储在两个列表中。如果需要翻页,它还会自动点击下一页按钮。

第五步:数据整理

现在,我们已经成功爬取了UP主的信息,接下来让我们对数据进行整理。首先,我们将按照首字母对UP主进行分类:

abc_name = []
abc_name2 = []
abc_people = []
abc_people2 = []
abc = "A"

for i in range(26):
    for j in name_list:
        if getStrFirstAlpha(j) == abc:
            abc_name.append(j)
            tt = name_list.index(j)
    abc = chr(ord(abc) + 1)

for id in abc_name:
    if id not in abc_name2:
        abc_name2.append(id)

for i in abc_name2:
    abc_people2.append(people_list[name_list.index(i)])

这段代码会将UP主按照首字母进行分类,并创建两个新的列表,分别存储UP主的名字和粉丝数量。

第六步:数据保存

我们将整理好的数据保存为CSV文件,以备后续分析和可视化使用:

data = pd.DataFrame({"UP主名字": name_list, "粉丝数量/万": people_list})
data.to_csv("up主信息.csv")

data = pd.DataFrame({"UP主名字": abc_name2, "粉丝数量/万": abc_people2})
data.to_csv("按首字母分类.csv")

这将创建两个CSV文件

,分别存储UP主的详细信息和按首字母分类的信息。

第七步:数据可视化

现在,我们已经成功获取和整理了UP主的信息,接下来让我们使用Matplotlib进行数据可视化。我们将创建两个柱状图,一个显示所有UP主的粉丝数量,另一个按首字母分类显示:

plt.subplot(1, 2, 1)
bar1 = plt.bar(name_list, people_list, color=['r', 'r', 'r', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'])
plt.xticks(rotation=90, fontsize=13)
plt.bar_label(bar1, label_type='edge')

plt.subplot(1, 2, 2)
bar2 = plt.bar(abc_name2, abc_people2, color=['r', 'r', 'r', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'])
plt.bar_label(bar2, label_type='edge')
plt.xticks(rotation=90, fontsize=13)

plt.show()

这段代码会创建两个子图,一个显示所有UP主的粉丝数量,另一个按首字母分类显示。最后,通过plt.show()将图表显示出来。

总结

通过这个教程,你学会了如何使用Python、Selenium、Pandas和Matplotlib来爬取Bilibili上UP主的信息,并将其进行数据整理和可视化。这对于分析UP主的粉丝数量和分类是非常有用的。

现在,你可以探索更多的数据分析和可视化方法,或者将这些数据用于其他有趣的项目。希望这个教程对你有所帮助!

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:如何使用Python优化爬虫和数据可视化

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年9月13日
下一篇 2023年9月13日

相关推荐

  • 如何使用Python获取局域网内的IP与MAC地址

    当我和一群朋友一起参加一场网络游戏对战时,有一个问题开始困扰我们:如何确保只有我们这群朋友在局域网内?我们想知道是否有其他人也连接到了我们的网络。一个念头突然冒出来,为什么不使用Python来检测局域网内…

    2023年10月10日
    00
  • 如何使用Python爬取豆瓣电影Top250的电影海报

    作为一位电影爱好者,你可能经常关注豆瓣电影上的Top250电影榜单,想要了解哪些电影备受推崇。而且,你可能也希望将一些你喜欢的电影的海报保存下来,以便日后欣赏或分享。但是,手动一个一个点击电影,然后下载海…

    2023年9月21日
    00
  • 如何选择Python中的本地键值存储库

    在编程的世界里,有时我们需要在本地存储一些数据,以便后续使用。通常情况下,我们会使用各种配置文件,如INI、JSON、TOML、YAML等,来存储这些信息。然而,对于大量数据的存储需求,配置文件并不总是最好的选择。…

    2023年10月4日
    00
  • Python 快速学习指南

    在当今数字化时代,学习编程语言已经成为了一种必备的技能。而 Python 作为一门简单易学、功能强大的编程语言,备受程序员和初学者的青睐。本教程将为你介绍如何快速学习 Python,并掌握其基本知识和应用技巧。 初…

    2024年3月17日
    00
  • 如何使用Python进行图像形状匹配

    你是否曾经想过如何使用Python来识别一张图片中特定形状的位置,或者进行图像中的物体匹配?在这个教程中,我们将向你展示如何使用Python和OpenCV库进行图像形状匹配。无论你是想识别图像中的某个标志性形状,还是…

    2023年9月14日
    00
  • Python 包的可选依赖管理:了解 `extras_require`

    刚开始学 Python 的小张,热衷于编写自己的 Python 包并分享给大家。但在某天,他遇到了一个棘手的问题:如何为他的包管理不同的依赖?他不想让每个使用他包的用户都安装所有的依赖,只想根据使用情况来选择性地安…

    2023年10月9日
    00
  • 如何使用Stable Diffusion WebUI的API生成图像

    你是否曾想过如何利用Stable Diffusion WebUI的API来生成图像?在本教程中,我们将向你展示如何使用这个功能,以及如何在生成的图像中添加元数据。让我们开始吧! 故事开端 一天,你突然产生了一个创意,想要创建一…

    2023年9月13日
    00
  • 虚拟货币现货与期货交易:用Python实现量化交易,打败80%的交易者

    虚拟货币市场的风起云涌,吸引了越来越多的投资者。然而,要在这个高度波动的市场中获得成功并打败80%的交易者并不容易。本教程将带您深入了解虚拟货币的现货与期货交易,并教您如何使用Python进行量化交易,以提高…

    2023年12月28日
    00
  • Python虚拟环境打包及迁移教程

    在实际开发中,我们经常会使用虚拟环境来隔离不同项目的依赖。但是,当我们需要在另一台服务器上部署相同的环境时,可能会遇到一些问题。本教程将介绍如何将 Python 虚拟环境打包,并在另一台服务器上解压后即可运…

    2024年3月17日
    00
  • 使用Python下载并合并M3U8视频

    在互联网时代,视频内容丰富多样,M3U8是一种常见的视频流媒体格式,例如在线直播、视频网站等。有时候,我们可能想要下载并保存这些M3U8格式的视频供离线观看,或者进行其他处理。本教程将向你展示如何使用Python…

    2023年9月21日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注