2014-04-12 7 views
8

Sto cercando di imparare un po 'di bella zuppa e di ottenere alcuni dati html da alcuni iFrame - ma finora non ho avuto molto successo.python beautifulsoup iframe document html extract

Quindi, analizzare l'iFrame di per sè non sembra essere un problema con BS4, ma non mi sembra di ottenere il contenuto incorporato da questo, qualunque cosa faccia.

Ad esempio, si consideri l'iFrame sotto (questo è quello che vedo su strumenti di Chrome per sviluppatori):

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

dove, <html>...</html> è il contenuto Sono interessato a estrazione.

Tuttavia, quando uso il seguente codice BS4:

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

ottengo:

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

In altre parole, mi vengono i iFrame senza il documento <html>...</html> al loro interno.

ho provato qualcosa sulla falsariga di:

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

.. ma questo non sembra funzionare ..

Quindi, credo che la mia domanda è, come faccio in modo affidabile estrarre questi oggetti documento <html>...</html> dagli elementi iFrame.

risposta

12

I browser caricano il contenuto iframe in una richiesta separata. Dovrete fare la stessa cosa:

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

Ricorda: BeautifulSoup non è un browser; non recupererà immagini, risorse CSS e JavaScript per te.