点击按钮

时间:2016-07-14 03:43:05

标签: python-2.7 web-scraping beautifulsoup

我想从网页上抓取数据: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&amp;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和其他使用硒。

3 个答案:

答案 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。