2016-07-14 2 views
-1

Я хочу, чтобы очистить данные с веб-страницы: 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> 

Могу ли я сделать это я использую красивый суп
EDIT: Найдено 2 решения. Один использует beautifulsoup и другие, используя селен.

ответ

-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 
+0

Thnks. У меня есть одно сомнение, почему вы используете json.loads (html1)? Почему он дает данные в json-формате? Также, когда я набираю этот URL-адрес в браузере, загружается один файл с именем browser_ajax. Не следует ли открывать веб-страницу –

+0

Когда вы отправляете URL-адрес, сервер возвращает ответ 'json', и это причина' json.loads() '. – shiva

+0

Thnks ....................... –

0

Вы можете получить элемент веб-страницы из объекта BeautifulSoup, вызвав метод select() и передав строку селектора CSS для элемента, который вы ищете.

soup.select('span .load-more-text') 

Я считаю, что это должно работать на то, что вы пытаетесь сделать

+0

Вы не поняли этот вопрос. Я хочу очистить содержимое этой веб-страницы после того, как я нажму кнопку «Загрузить больше». –

-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 

С этого момента вы можете разобрать HTML, как вы бы от requests.

+0

THnks. Это произойдет позже, когда я начну использовать селен. –

Смежные вопросы