9

Voglio raschiare le foto da un account Instagram pubblico. Sono abbastanza familiare con bs4, quindi ho iniziato con quello. Usando l'ispettore elemento su Chrome, ho notato che le immagini sono in una lista non ordinata e che ha una "foto" di classe, quindi immagino, che diavolo - non può essere così difficile da raggirare con findAll, giusto?Come raschiare Instagram con BeautifulSoup

Sbagliato: non restituisce nulla (codice qui sotto) e ho subito notato che il codice mostrato in elemento di ispettore e il codice che ho disegnato dalle richieste non erano gli stessi AKA lista non ordinata nel codice ho tirato dalle richieste.

Qualche idea su come ottenere il codice visualizzato nell'ispettore elemento?

Per la cronaca, questo era il mio codice per iniziare, che non ha funzionato perché la lista non ordinata non c'era:

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 

Grazie per il vostro aiuto.

+0

La pagina utilizza pesantemente JavaScript. Vuoi vedere la pagina * source * (Chrome: View -> Developer -> View Source) per vedere cosa viene scaricato dal tuo browser. Quello che vedi nell'ispettore è ciò che il browser ha creato dopo aver eseguito il JavaScript a cui fa riferimento la pagina. –

risposta

8

Se si guarda il codice sorgente della pagina, vedrete che alcuni javascript generano la pagina web. Quello che vedi nel browser degli elementi è la pagina Web dopo lo script è stato eseguito, e beautifulsoup ottiene solo il file html. Per analizzare la pagina Web visualizzata devi utilizzare qualcosa come Selenium per eseguire il rendering della pagina web.

Così, per esempio, questo è come dovrebbe apparire con Selenio:

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 

Ora la zuppa dovrebbe essere quello che vi aspettate.