如何使用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快速、方便地将照片背景换成白色

    在数字化时代,我们经常需要处理照片,不论是为了美化自己的社交媒体照片,还是为了编辑产品图片以展示在电子商务网站上。有时,我们可能想要改变照片的背景,使其更加吸引人或适应特定的需求。最近,我也遇到了这…

    2023年10月22日
    00
  • 使用Python编写小说章节批量下载器

    在本教程中,我们将学习如何使用Python编写一个小说章节批量下载器。这个工具可以帮助你下载小说的所有章节并保存为文本文件,以便离线阅读。我们将使用Python的Requests库来获取网页内容,Beautiful Soup库来解析H…

    2023年9月21日
    00
  • 生成随机字符串的Python教程

    你是否曾经需要生成随机字符串,无论是用于密码,测试数据,还是其他目的?这个简单的Python程序可以帮助你生成自定义长度和字符集的随机字符串。在本教程中,我们将介绍如何使用Python和Tkinter库创建一个交互式的…

    2023年9月18日
    00
  • 如何使用Python清除测试数据:一次性删除数据库中的记录

    在软件开发和测试中,测试数据的管理是一个常见的挑战。想象一下,你正在进行测试,并且需要频繁地清除数据库中的记录以进行新一轮的测试。手动删除这些记录是繁琐且容易出错的,因此有一个自动化的工具将会非常有…

    2023年9月24日
    00
  • Python多线程中实现弹窗式对话框:解决子线程异常提示问题

    在Python程序中,有时候我们需要在子线程中处理任务,但如果这些子线程出现异常,我们希望能够在不中断主线程的情况下,通过一个弹窗式对话框来提示用户并做出决策。这似乎是一个简单的需求,但在多线程环境下,却…

    2023年10月26日
    00
  • 如何利用黑盒交易赚取虚拟货币的利润

    你是否曾想过,当大部分人正在沉睡时,你的黑盒交易系统可以代表你进行虚拟货币交易,从而为你赚取利润?在这个充满活力和机会的虚拟货币市场上,黑盒交易为你提供了这个可能性。在本文中,我们将探讨黑盒交易在虚…

    2023年9月21日
    00
  • 正则表达式在Python爬虫中的应用与处理技巧

    在网络时代,数据是无处不在的。无论您是做市场研究、数据分析还是需要从网站中获取信息,Python爬虫是一个强大的工具,能够帮助您收集、提取和处理网页上的数据。而正则表达式是Python爬虫中不可或缺的工具之一。…

    2023年10月18日
    00
  • 2C4G 轻量级服务器:10种创意应用教程与技巧

    你是否曾想过,那台存放在角落的2C4G轻量级服务器可以有着更多用途?或许你购买它的初衷只是为了满足某个特定需求,但实际上,这台服务器是一把开启创意和可能性之门的钥匙。在这个数字化时代,技术不断演进,服务…

    2023年8月23日
    00
  • Python PEP 703:摆脱全局解释器锁的新篇章

    Python的指导委员会最近宣布接受了PEP 703(Making the Global Interpreter Lock Optional,让全局解释器锁成为可选),并公布了一份详细的路线图,计划让Python迈向自由线程的未来。这一决定引起了广泛的关注和讨…

    2023年10月27日
    00
  • 如何从PPT文件中提取文本

    在处理PPT文件时,有时我们需要将其中的文本提取出来以进行后续处理或分析。可能是需要编辑PPT中的文本,或者将其中的文字内容用于其他用途。不论你的需求是什么,本教程将向你展示如何使用Python来轻松从PPT文件中…

    2023年10月10日
    00