2014-04-12 13 views
8

Próbuję nauczyć się odrobiny pięknej zupy i uzyskać dane html z niektórych elementów iFrame - ale do tej pory nie byłem zbyt udany.python beautifulsoup iframe dokument html extract

A zatem, parsowanie iFrame nie wydaje się być problemem z BS4, ale nie wydaje mi się, aby uzyskać z tego treść osadzoną - cokolwiek robię.

Na przykład rozważmy poniższy iFrame (to, co widzę na chrom narzędzi programistycznych):

<iframe frameborder="0" marginwidth="0" marginheight="0" scrolling="NO" 
src="http://www.engineeringmaterials.com/boron/728x90.html "width="728" height="90"> 
#document <html>....</html></iframe> 

gdzie <html>...</html> jest zawartość Jestem zainteresowany wydobycia.

Jednak, kiedy użyć następującego kodu BS4:

iFrames=[] # qucik bs4 example 
for iframe in soup("iframe"): 
    iFrames.append(soup.iframe.extract()) 

uzyskać:

<iframe frameborder="0" marginwidth="0" marginheight="0" scrolling="NO" src="http://www.engineeringmaterials.com/boron/728x90.html" width="728" height="90"> 

Innymi słowy, pojawia się iFrames bez dokumentu <html>...</html> w ich obrębie.

Próbowałem coś wzdłuż linii:

iFrames=[] # qucik bs4 example 
iframexx = soup.find_all('iframe') 
for iframe in iframexx: 
    print iframe.find_all('html') 

.. ale to nie wydają się działać ..

Tak, myślę, że moje pytanie jest, w jaki sposób wiarygodny sposób wyodrębnić te obiekty dokumentu <html>...</html> z elementów iFrame.

Odpowiedz

12

Przeglądarki ładują zawartość iframe w osobnym żądaniu. Będziesz musiał zrobić to samo:

for iframe in iframexx: 
    response = urllib2.urlopen(iframe.attrs['src']) 
    iframe_soup = BeautifulSoup(response) 

Pamiętaj: BeautifulSoup nie jest przeglądarką; nie pobierze też dla ciebie obrazów, zasobów CSS i JavaScript.