爬取B站博主粉丝量
import pandasfrom 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() 其实B站有api的,不用这么麻烦 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浏览器的选项。
浏览器爬有啥看的{:1_896:} 还不错,但是代码不够简洁哈哈 可以可以,学习一下
搞点有用的~ 哇~~~膜拜一下大佬~~ 感谢大佬,这个确实有用{:1_893:} 这种应该使用requests爬更快 谢谢@Thanks!