首先我们要知道B站播放量的计算方法:不同的IP只能统计一次。 如果点击关闭,播放完成度会很低买快手播放量的网址,这是不利的。
那么我们要做的就是:不断改变IP地址打开视频播放页面,最好把视频播放完。
操作方法如下:
获取某个网页的所有代理IP并返回IP列表:
def get_ip_list(url, headers):
web_data = requests.get(url, headers=headers)
soup = BeautifulSoup(web_data.text, 'lxml')
ips = soup.find_all('tr')
ip_list = []
for i in range(1, len(ips)):
ip_info = ips[i]
tds = ip_info.find_all('td') #tr标签中获取td标签数据
ip = tds[1].text + ':' + tds[2].text
ip_list.append(ip)
return ip_list
代码来自:
我用 xpath 和 requests 尝试过。 我不知道为什么它不起作用,但是上面的那个起作用了。
后来我了解到,下载的文本中的某些元素会被省略,因此不能使用绝对路径。
从网站爬取数据(主要是不断切换页面)
def Get_Ip_Form_66():
global ip_list
ip_list=[]
global headers
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',
'Accept-Language':'zh-CN,zh;q=0.8',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Host':'www.66ip.cn',
'If-None-Match':'W/"b077743016dc54409ebe6b86ba7a869b"',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36',
}
cookies = None
for i in range(1,20):
url = 'http://www.66ip.cn/'+str(i)+'.html'
ip_list.append(get_ip_list(url,headers))
然后网页会自动打开。 获取视频时间并倍速播放。agent部分指的是
def Auto_Like_Your_Video(url):
try:
# 使用代理ip
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--proxy-server="+str(url))# 一定要注意,=两边不能有空格,不能是这样--proxy-server = http://202.20.16.82:10152
driver = webdriver.Chrome(options=chromeOptions)
# 打开视频播放页
driver.get("https://www.bilibili.com/video/BV1hi4y1x7PM")
time.sleep(7)
# 获取视频时长
Video_Time = driver.find_element_by_xpath("//div[@name='time_textarea']/span[3]").text
Total_Second = Change_The_Time_Type(Video_Time)
# 两倍速
element=driver.find_element_by_xpath("//button[@class='bilibili-player-video-btn-speed-name']")
webdriver.ActionChains(driver).move_to_element(element).click(element).perform()
element=driver.find_element_by_xpath("//ul[@class='bilibili-player-video-btn-speed-menu']/li[1]")
webdriver.ActionChains(driver).move_to_element(element).click(element).perform()
# 点击播放
element=driver.find_element_by_xpath("//button[@class='bilibili-player-iconfont bilibili-player-iconfont-start']")
webdriver.ActionChains(driver).move_to_element(element).click(element).perform()
# 页面最小化
driver.minimize_window()
# 看完视频
time.sleep(Total_Second/2)
# 关闭页面
driver.close()
except :
pass
请注意,在两倍速度下,鼠标必须向上移动才能单击,因此添加了新的向上移动动作。 否则就用xpath来定位吧。 没有什么麻烦。
主要缺点:您必须先观看一个视频才能观看下一个视频,并且没有代理 IP 池的验证。 后来尝试测试了一下,效果并不好(比如打开百度,在里面找某个元素,看看能不能找到)。 如果我用多线程,不知道为什么买快手播放量的网址,开了5个5个,电脑立马就死机了。 它死了。 页面可以打开,但是很卡,无法点击。 它也不起作用。
如果大家有什么好的方法希望可以告诉我。
完整代码可访问: