2013-08-22 1 views
1

Я пытаюсь загрузить страницу youtube и получить элемент <embed> следующим образом. Однако элемент embed не может быть найден (soup.find('embed') возвращает None).Имитировать доступ браузера для загрузки всех элементов html

import urllib 
import urllib2 
from bs4 import BeautifulSoup 
import mechanize 

YT_URL = 'http://www.youtube.com/watch' 
vidId = 'OuSdU8tbcHY' 

br = mechanize.Browser() 
# Browser options 
br.set_handle_equiv(True) 
br.set_handle_redirect(True) 
br.set_handle_referer(True) 
br.set_handle_robots(False) 
# Follows refresh 0 but not hangs on refresh > 0 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 
# User-Agent (this is cheating, ok?) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
br.open('%s?v=%s' % (YT_URL, vidId)) 
soup = BeautifulSoup(br.response().read()) 
print soup.find('embed') 

Однако, когда я пишу суп HTML-файл и загрузить его в браузере он загружает <embed> элемент. Предположительно, это как-то связано с тем, что браузер отличается от механизации и некой магией document.onload()?

Как смоделировать браузер, загружая страницу, чтобы я мог видеть элемент <embed>?

+0

SELENIUM! Это ваш ответ –

ответ

1

На странице используется js для загрузки содержимого по-разному. Механизация просто не может справиться с этим. У вас есть два варианта здесь:

  • пытаются имитировать эти JS вызовы вручную в сценарии
  • переключатель для инструментов в браузере, как selenium

Вот тот же пример с использованием selenium:

import selenium.webdriver as webdriver 

url = "http://www.youtube.com/watch?v=OuSdU8tbcHY" 

driver = webdriver.Firefox() 
driver.get(url) 

embed = driver.find_elements_by_tag_name('embed')[0] 

print embed 

Надеюсь, что это поможет.

+1

Хорошее видео, btw :) – alecxe

+0

Это одна хорошая альтернатива, но я не использую настоящий браузер! –

+0

@ david_adler хорошо, может быть безголовый браузер - это вариант, см. Http://stackoverflow.com/questions/6025082/headless-browser-for-python-javascript-support-required – alecxe

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