我曾尝试为Instagram编写一个订婚率计算器,但它不能正常工作。计算参与率的公式是:最近12篇帖子(不包括最近一篇)的喜欢和评论的平均数除以关注者的数量。我的计算器循环浏览指定文件中的用户名列表,然后转到Instagram上每个用户的配置文件并计算E.R。然后,它将输出(用户名旁边的E.R.)放置在excel电子表格中,并根据页面的跟随者数量将其分列显示。但我的问题是E.R.是错的,我用的是ninjalitics公司的E.R计算器。com作为参考点。这是我的代码,如果你看到任何可能导致错误结果的东西,请告诉我
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
import csv
usr = '' #input username for loging in
pw = '' #input password
file = 'Data' #set the name of the file for the ouput
print('\nstatus: working on it...')
print('\n\n')
executable_path = r"C:\Users\Acer\Downloads\Insta proj\Insta proj\dist\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=executable_path)
driver.get("https://www.instagram.com/")
sleep(1)
driver.find_element_by_name('username').send_keys(usr)
driver.find_element_by_name('password').send_keys(pw)
driver.find_element_by_name('password').submit()
sleep(6)
names = []
data1 = [] #for 1k- 5k
data2 = [] #for 5k-10k
data3 = [] #for 10k-100k
data4 = [] #for 100kk-1M
data5 = [] #for 1M-10M
with open('totalflw.csv', 'r') as filehandle: #here change the filename to the filename you want to input
for line in filehandle:
currentPlace = line[:-1]
names.append(currentPlace)
for name in names:
driver.get(f"https://www.instagram.com/{name}/")
sleep(2)
print('Analysing',name+'...','\n')
flrs = (driver.find_elements_by_class_name('Y8-fY ')[1].text.split(' ')[0])
if flrs[-1] == 'm':
flrs = float(flrs[:-1])*1000000
elif flrs[-1] == 'k':
flrs = float(flrs[:-1])*1000
else:
flrs = int(flrs.replace(',',''))
count = 0
element_to_hover_over = driver.find_elements_by_class_name("v1Nh3")
likes = 0
cmnts = 0
if len(element_to_hover_over) > 0:
for each_elem in element_to_hover_over:
count+=1
if count == 1: continue
if count > 13: break
hover = ActionChains(driver).move_to_element(each_elem)
hover.perform()
val = driver.find_element_by_class_name('qn-0x').text.split('\n')
if val[0][-1] == 'm':
likes += float(val[0][:-1])*1000000
elif val[0][-1] == 'k':
likes += float(val[0][:-1])*1000
else:
likes += int(val[0].replace(',',''))
try:
if val[1][-1] == 'm':
cmnts += float(val[1][:-1])*1000000
elif val[1][-1] == 'k':
cmnts += float(val[1][:-1])*1000
else:
cmnts += int(val[1].replace(',',''))
except:
cmnts += 0
er = round(((cmnts + likes)/ flrs), 2)
if flrs >= 1000 and flrs < 5000:
if (er >= 0.57):
data1.append([name,er])
if flrs >= 5000 and flrs < 10000:
if (er >= 0.4):
data2.append([name,er])
if flrs >= 10000 and flrs < 100000:
if (er >= 0.24):
data3.append([name,er])
if flrs >= 100000 and flrs < 1000000:
if (er >= 0.15):
data4.append([name,er])
if flrs >= 1000000 and flrs <= 10000000:
if (er >= 0.8):
data5.append([name,er])
lent = max(len(data1),len(data2),len(data3),len(data3),len(data5))
def takeSecond(elem):
return elem[1]
data1.sort(reverse=True,key=takeSecond)
data2.sort(reverse=True,key=takeSecond)
data3.sort(reverse=True,key=takeSecond)
data4.sort(reverse=True,key=takeSecond)
data5.sort(reverse=True,key=takeSecond)
with open(file+".csv",'w', encoding='utf-8',newline='') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['1k-5k','','5k-10k','','10k-100k','','100k-1M','','1M-10M'])
for i in range(0,lent):
if i+1>len(data1):
data1.append(['',None])
if i+1>len(data2):
data2.append(['',None])
if i+1>len(data3):
data3.append(['',None])
if i+1>len(data4):
data4.append(['',None])
if i+1>len(data5):
data5.append(['',None])
csvwriter.writerow(data1[i]+data2[i]+data3[i]+data4[i]+data5[i])
print('status: Analysed all profiles for their Engagment rates!')
目前没有回答
相关问题 更多 >
编程相关推荐