Eks6666 发表于 2023-9-5 00:38

爬取B站博主粉丝量

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
    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/ul/li['+str(t)+']')
      t+=1
      txt = li.text
      name = txt.split("\n").split("+")
      people = txt.split("\n").split(":").split("万")
      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/div/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)

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()

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

浏览器爬有啥看的{:1_896:}

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

感谢大佬,这个确实有用{:1_893:}

sadtear 发表于 2023-9-5 14:45

这种应该使用requests爬更快

cndy 发表于 2023-9-5 15:06

谢谢@Thanks!
页: [1] 2 3
查看完整版本: 爬取B站博主粉丝量