我想从网页上抓取数据:https://www.youtube.com/playlist?list=PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj
页面末尾有一个“加载更多”按钮,可以加载更多视频。
此页面仅显示100个视频,但我想在点击“加载更多”按钮后解析数据。
<button class="yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more browse-items-load-more-button" type="button" onclick=";return false;" aria-label="Load more
" data-uix-load-more-target-id="pl-load-more-destination" data-uix-load-more-href="/browse_ajax?action_continuation=1&continuation=4qmFsgIuEiRWTFBMTUM5S05rSW5jS3RQemdZLTVybWh2ajdmYXg4ZmR4b2oaBkNHVSUzRA%253D%253D"><span class="yt-uix-button-content"> <span class="load-more-loading hid">
<span class="yt-spinner">
<span class="yt-spinner-img yt-sprite" title="Loading icon"></span>
Loading...
</span>
</span>
<span class="load-more-text">
Load more
</span>
</span></button>
我可以这样做吗?我使用美丽的汤 编辑:找到2个解决方案。一个使用beautifulsoup和其他使用硒。
答案 0 :(得分:0)
您可以通过调用select()方法并为您要查找的元素传递CSS选择器的字符串,从BeautifulSoup对象中检索网页元素。
soup.select('span .load-more-text')
我相信这应该适用于您正在尝试做的事情
答案 1 :(得分:-1)
我使用以下代码获取video titles
,您可以对其进行编辑以抓取其他内容。
from bs4 import BeautifulSoup
import json
import requests
url = "https://www.youtube.com/playlist?list=PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj"
html=requests.get(url).text
soup=BeautifulSoup(html, "lxml")
links=soup.find_all(class_='pl-video-title')
for vid in links:
print vid.contents[1].string
url1="https://www.youtube.com/browse_ajax?action_continuation=1&continuation=4qmFsgIuEiRWTFBMTUM5S05rSW5jS3RQemdZLTVybWh2ajdmYXg4ZmR4b2oaBkNHVSUzRA%3D%3D"
html1=requests.get(url1).text
data=json.loads(html1)
soup=BeautifulSoup(data[u'content_html'], "lxml")
links=soup.find_all(class_='pl-video-title')
for vid in links:
print vid.contents[1].string
答案 2 :(得分:-1)
阅读播放列表的最佳方式是使用YouTube API。
但是,如果由于某种原因您无法使用它,那么您在此处需要的是一个也可以与该页面进行交互的抓取工具。 selenium
就是一个很好的例子:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
driver.get("https://www.youtube.com/playlist?list=PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj") # Get the playlist page
# Click the button
load_more_button = driver.find_element_by_class_name("load-more-text")
load_more_button.click()
# Wait *up to* 10 seconds to make sure the page has finished loading (check that the button no longer exists)
WebDriverWait(driver,10).until(EC.invisibility_of_element_located(
(By.CLASS_NAME, "load-more-text")))
# Get the html
html = driver.page_source
从现在开始,您可以像requests
一样解析HTML。