Python beautifulsoup iframe document extrait html

j'essaie d'apprendre un peu de belle soupe, et d'obtenir quelques données html de certaines iFrames - mais je n'ai pas été très réussi jusqu'à présent.

donc, analyser l'iFrame en soi ne semble pas être un problème avec BS4, mais je ne semble pas obtenir le contenu intégré à partir de cela - quoi que je fasse.

par exemple, considérez l'iFrame ci-dessous (c'est ce que je vois sur les outils de développement chrome):

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

<html>...</html> est le contenu, je suis intéressé par extractibles.

Cependant, lorsque j'utilise la suite BS4 code:

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

j'obtiens:

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

en d'autres termes, j'obtiens les iFrames sans le document <html>...</html> à l'intérieur d'eux.

j'ai essayé quelque chose le long des lignes de:

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

.. mais cela ne semble pas fonctionner..

donc, je suppose que ma question Est, Comment puis-je extraire de façon fiable ces objets de document <html>...</html> de l'iFrame éléments.

8
demandé sur Martijn Pieters 2014-04-12 13:37:10

1 réponses

les navigateurs chargent le contenu iframe dans une demande distincte. Vous aurez à faire de même:

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

N'oubliez pas: BeautifulSoup n'est pas un navigateur; il ne récupérera pas les ressources d'images, CSS et JavaScript pour vous non plus.

12
répondu Martijn Pieters 2014-04-12 09:48:53