所以,我试图使用Selenium创建一个youtube视频的N个元素的字典,以及它们在youtube搜索中的视图。例如:{视频网址01':521,视频网址02':782}是的,关键将是视频的url,索引将是观看次数,总共将有N个视频。
登陆搜索页面并进行搜索后,接下来应该采取哪些步骤来实现这一点。
我们非常感谢您的任何帮助:>
到目前为止,设法获得了所有的视频标签:
def GetTopVideosfromSearch(self,query,N):
query = query.replace(' ', '+')
self.browser.get('https://www.youtube.com/results?search_query='+query)
vids=self.browser.find_elements_by_id('video-title')
for vid in vids[0:N]:
print((vid.get_attribute("aria-label")))
我过去使用过Selenium,但用于解析其他网站。
首先,您需要生成内容,因为YouTube很可能正在使用ajax。
这可以通过以下方式实现:
Keys.PAGE_DOWN
生成内容后,必须在生成的html中进行搜索,即您要查找的元素。
在我的情况下,我在寻找价格:
browser.find_elements_by_class_name("product-info-price")
一旦你有了它,你就可以像循环一样迭代,并将结果添加到字典中:
以下是一个完整的片段:
# imports
import pandas as pd
import requests
import time
import selenium
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
link = "https://es.wallapop.com/search?catIds=12461&dist=400&publishDate=any"
browser = webdriver.Chrome()
browser.get(link)
time.sleep(1)
body = browser.find_element_by_tag_name("body")
element = browser.find_element_by_class_name('Button')
browser.execute_script("arguments[0].click();", element)
# generate content, scrolling down the webpage
for _ in range(10):
body.send_keys(Keys.PAGE_DOWN)
time.sleep(0.1)
# iterate over the elements and append to the list
list_of_prices = []
for price in browser.find_elements_by_class_name("product-info-price"):
list_of_prices.append(price.text)
找到了一个适用于我的的解决方案
def GetTopVideosfromSearch(self,query,N):
query = query.replace(' ', '+')
self.browser.get('https://www.youtube.com/results?search_query='+query)
for _ in range(N-4):
self.browser.find_element_by_tag_name("body").send_keys(Keys.PAGE_DOWN)
time.sleep(0.1)
vids=self.browser.find_elements_by_id('video-title')
vidsDict={}
for vid in vids[0:N]:
tmp = vid.get_attribute("aria-label")
tmp=tmp[::-1]
s=0
views=''
for t in tmp:
if t==' ':
s+=1
if s==1 and t!=' ' and t!=',':
views+=t
views=int(views[::-1])
vidsDict[vid.get_attribute("href")] = views
return vidsDict