吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2248|回复: 21
收起左侧

[Python 原创] 爬取B站博主粉丝量

[复制链接]
Eks6666 发表于 2023-9-5 00:38
[Python] 纯文本查看 复制代码
import pandas
from selenium import webdriver
import matplotlib.pyplot as plt
from selenium.webdriver.common.by import By
import pinyin

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

def getStrAllAplha(str):
    return pinyin.get_initial(str, delimiter="").upper()


def getStrFirstAplha(str):
    str = getStrAllAplha(str)
    str = str[0:1]
    return str.upper()

url = "https://search.bilibili.com/upuser?keyword=mc&from_source=webtop_search&spm_id_from=333.1007&order=fans"
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)
edge.implicitly_wait(10)
edge.get(url)
page=2
t = 1
name_l = []
people_l = []
for i in range(1,101):
    try:
        if t==21:
            t=1
        li = edge.find_element(by=By.XPATH,value='//*[@id="user-list"]/div[1]/ul/li['+str(t)+']')
        t+=1
        txt = li.text
        name = txt.split("\n")[0].split("+")[0]
        people = txt.split("\n")[2].split(":")[1].split("万")[0]
        name_l.append(name)
        people_l.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

abc_name = []
abc_name2 = []
abc_people = []
abc_people2 = []
abc = "A"
for i in range(26):
    for j in name_l:
        if getStrFirstAplha(j)==abc:
            abc_name.append(j)
            tt = name_l.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_l[name_l.index(i)])

print(len(abc_name2),abc_name2)
print(len(abc_people2),abc_people2)

data = pandas.DataFrame({"up名字": name_l, "粉丝数量/万": people_l})
data.to_csv("csv1.csv")
data = pandas.DataFrame({"up名字": abc_name2, "粉丝数量/万": abc_people2})
data.to_csv("csv2.csv")

plt.subplot(1,2,1)
bar1 = plt.bar(name_l,people_l,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()

免费评分

参与人数 5吾爱币 +12 热心值 +4 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lingyiling + 1 + 1 我很赞同!
wojaiyh + 1 谢谢@Thanks!
caojian162411 + 1 + 1 热心回复!
潇洒超人 + 2 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kof21411 发表于 2023-9-5 08:06
其实B站有api的,不用这么麻烦
barnett2016 发表于 2023-9-7 13:06
Traceback (most recent call last):
  File "11.py", line 22, in <module>
    opt = webdriver.EdgeOptions
AttributeError: module 'selenium.webdriver' has no attribute 'EdgeOptions'


根据报错信息,这个错误是因为selenium.webdriver模块中没有EdgeOptions属性或类。

请确保您已经安装了适用于Edge浏览器的Selenium WebDriver,并且与您的浏览器版本兼容。

如果您使用的是Selenium 4或更高版本,请使用EdgeOptions类的替代方法。可以尝试以下代码:

from selenium.webdriver import Edge, EdgeOptions

opt = EdgeOptions()
opt.add_argument("your_argument")

driver = Edge(options=opt)
如果您使用的是Selenium 3或更低版本,并且仍然遇到问题,可能是因为您的Selenium版本不支持Edge浏览器的某些特定功能。

您可以尝试更新Selenium版本或尝试其他方法来配置Edge浏览器的选项。

等到烟火也清凉 发表于 2023-9-5 08:32
ZZGGTT 发表于 2023-9-5 09:33
还不错,但是代码不够简洁哈哈
TFshopte 发表于 2023-9-5 10:52
可以可以,学习一下
wsxb 发表于 2023-9-5 11:37
搞点有用的~
jacken2019 发表于 2023-9-5 11:43
哇~~~膜拜一下大佬~~
djshitaincai 发表于 2023-9-5 12:27
感谢大佬,这个确实有用
sadtear 发表于 2023-9-5 14:45
这种应该使用requests爬更快
cndy 发表于 2023-9-5 15:06
谢谢@Thanks!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表