2015-09-29 16 views
8

Esiste un modo per ottenere i contenuti javascript eseguiti da una pagina Web? Ho provato le richieste + BeautifulSoup, meccanizza, questi mi danno con "codice sorgente" della pagina web e non con il javascript eseguito. Ad esempio, questo sito Web: - http://listen.tidal.com/loginottiene il contenuto javascript eseguito in python

Come si può vedere, nel codice sorgente c'è JS non eseguito, ma, quando si ispeziona l'elemento, vedrai il codice eseguito.

Ora, c'è un modo per ottenere quel codice EXECUTED in python? Suggerimenti, per favore, perché ho provato ad emulare un browser usando mechanize e fa lo stesso di reuqests. Grazie

+1

Vedere [Emulatore browser Python con supporto JS] (http://stackoverflow.com/questions/21777306/python-browser-emulator-with-js-support). – approxiblue

+1

hanno anche un aspetto: http://stackoverflow.com/questions/8049520/web-scraping-javascript-page-with-python – mico

+0

http://stackoverflow.com/questions/5793414/mechanize-and-javascript, anche – mico

risposta

3

In realtà, è necessario JavaScript engine per l'esecuzione di javascript. Python è un linguaggio con un proprio interprete (compilatore!) Per eseguire il codice Python. Queste sono due tecnologie diverse. Quindi se vuoi eseguire javascript da python, python deve avere api o una sorta di binding che interagisce con il motore esegue javascript. Fortunatamente Python ha interattività con diversi JS Engine per l'implementazione di lavori relativi al Web (test, ecc.). Questo interoperabili JS possono essere suddivisi in due gruppi come sotto-

  1. Browser senza Graphical User Interface (GUI) aka Headless browser: per esempio PhantomJS un Webkit basato motore di rendering del browser senza testa, SlimerJS un Gecko basato motore di rendering del browser senza testa per più vedere here. Puoi interagire con PhantomJS con selenium (una colla tra python e PhantomJS) oppure puoi usare PyQt e usare python per eseguire JS come here.
  2. Browser con interfaccia utente grafica (GUI): ad es. Firefox, Chromium, Safari, ecc. Anche in questo caso è possibile eseguire JS tramite selenium python.

semplice esempio esecuzione di JS di selenio Python come sotto-

from selenium import webdriver 
#define driver- firefox, chrome or phantomjs etc. 
driver = webdriver.Firefox() 
#Open the url 
driver.get('https://www.google.com') 
#see how javascript simple alert is being executed 
driver.execute_script("alert('hello world');") 
#close the driver i.e. closing opened Firefox instance! 
driver.close() 
0

Sì, devi scegliere uno strumento che supporti il ​​contenuto Javascript, altro da meccanico. La meccanica è solo per contenuti statici come hai già osservato. Ce ne sono diversi, trovati dalle parole di ricerca "python alternative to mechanics". Vorrei testare PhantomJS, se dovessi sceglierne uno.

Anche altre altre sono state trovate nelle altre risposte collegate nei commenti, volevo solo lasciarle come commenti per evitare "SO non è un problema con il tuo strumento preferito che consiglia il sito" e quindi viene menzionata solo la soluzione universale . Quindi, si prega di fare una piccola ricerca;)

1

solo evidenziare - Python non esegue il codice Js, ma runtime fa. Ecco un esempio del modulo python che seleziona il runtime disponibile e valuta il codice per te.

Look at PyExecJS, qui puoi trovare alcuni esempi, ma tieni conto che potrebbe non contenere alcuna API del browser come DOM, Html5 Api, ecc. Si basa principalmente sulle funzionalità del motore js.

Un'altra grande domanda, qual è la ragione per valutare il codice nel python?

Problemi correlati