Я пытаюсь загрузить страницу 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>
?
SELENIUM! Это ваш ответ –