9

Ich möchte Bilder von einem öffentlichen Instagram-Konto kratzen. Ich bin ziemlich vertraut mit BS4, also begann ich damit. Mit dem Element Inspector in Chrome habe ich festgestellt, dass die Bilder in einer ungeordneten Liste sind und ich habe die Klasse "Foto", also denke ich, was zur Hölle - kann nicht so schwer sein, mit findAll zu kratzen, oder?So kratzen Instagram mit BeautifulSoup

Falsch: es zurückgeben etwas (Code unten) nicht und ich bald feststellen, dass der Code im Elemente Inspektoren angezeigt, und der Code, den ich von Anfragen zog war nicht die gleiche AKA keine ungeordnete Liste in dem Code, den ich gezogen aus Anfragen.

Irgendeine Idee, wie ich den Code, der im Element Inspector angezeigt wird, bekommen kann?

Nur für das Protokoll, das war mein Code zu starten, was nicht funktioniert, weil die ungeordnete Liste nicht da war:

from bs4 import BeautifulSoup 
import requests 
import re 

r = requests.get('http://instagram.com/umnpics/') 
soup = BeautifulSoup(r.text) 
for x in soup.findAll('li', {'class':'photo'}): 
    print x 

Vielen Dank für Ihre Hilfe.

+0

Die Seite verwendet stark JavaScript. Sie möchten auf die Seite * source * (Chrome: Ansicht -> Entwickler -> Quelle anzeigen) schauen, um zu sehen, was von Ihrem Browser heruntergeladen wird. Im Inspektor sehen Sie, was der Browser nach dem Ausführen des von der Seite referenzierten JavaScript erstellt hat. –

Antwort

8

Wenn Sie den Quellcode für die Seite betrachten, werden Sie sehen, dass einige Javascript die Webseite generiert. Was Sie im Element-Browser sehen, ist die Webseite, nachdem das Skript ausgeführt wurde, und beautifulsoup ruft nur die HTML-Datei ab. Um die gerenderte Webseite analysieren zu können, müssen Sie etwas wie Selenium verwenden, um die Webseite für Sie zu rendern.

So zum Beispiel ist dies, wie es mit Selen aussehen würde:

sein die Suppe sollte
from bs4 import BeautifulSoup 
import selenium.webdriver as webdriver 

url = 'http://instagram.com/umnpics/' 
driver = webdriver.Firefox() 
driver.get(url) 

soup = BeautifulSoup(driver.page_source) 

for x in soup.findAll('li', {'class':'photo'}): 
    print x 

Nun, was Sie erwarten.