2015-09-29 40 views
8

有沒有什麼辦法從網頁獲取執行的JavaScript內容? 我已經嘗試過請求+ BeautifulSoup,機械化,這些產生我與網頁的「源代碼」,而不是執行的JavaScript。例如,本網站: - http://listen.tidal.com/login獲取python中執行的JavaScript內容

正如您所看到的,在源代碼中存在未執行的JS,但是當您檢查該元素時,您會看到執行的代碼。

現在,有沒有什麼辦法可以讓我在python中執行EXECUTED代碼? 提示請,因爲我試圖模擬瀏覽器使用機械​​化,它像reuqests一樣。 謝謝

+1

請參閱[具有JS支持的Python瀏覽器模擬器](http://stackoverflow.com/questions/21777306/python-browser-emulator-with-js-support)。 – approxiblue

+1

也有看:http://stackoverflow.com/questions/8049520/web-scraping-javascript-page-with-python – mico

+0

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

回答

3

實際上,執行javascript需要JavaScript engine。 Python是一種具有自己的解釋器(編譯器!)來執行Python代碼的語言。這是兩種不同的技術。所以如果你想從python執行javascript,python必須有api或者與引擎交互的綁定類型來執行javascript。幸運的是,python與幾個JS Engine有交互性,用於實現與web相關的工作(測試等)。這可互操作的JS可分爲兩組作爲如下─

  1. 瀏覽器而不圖形用戶界面(GUI)又名Headless browser:例如PhantomJS a Webkit基於渲染引擎的無頭瀏覽器,SlimerJS a gecko基於渲染引擎的無頭瀏覽器更多請參閱here。您可以使用PhantomJS與selenium(python和PhantomJS之間的膠水)進行互操作,或者您可以使用PyQt並使用python運行JS,如here
  2. 瀏覽器圖形用戶界面(GUI):例如Firefox,Chromium,Safari等。在這種情況下,您也可以通過selenium python執行JS。硒蟒蛇JS的

執行簡單的例子如下─

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

是的,你必須選擇一個支持Javascript內容的工具,其他的機制。力學只適用於你已經觀察到的靜態內容。有幾個,通過搜索詞「python替代力學」找到。如果我必須選擇一個,我會測試PhantomJS。

另外幾個人都在評論鏈接其他的答案中發現,只是我想保留這些因避「等都不是挑選自己喜歡的工具,建議網站」的問題,因此只有通用的解決方案中提到的意見。所以,請稍微搜索一下;)

1

只是爲了突出 - Python不執行你的js代碼,但運行時一樣。 下面是一個Python模塊的例子,它選擇可用的運行時併爲您計算代碼。

Look at PyExecJS,在這裏你可以找到一些例子,但要考慮到它可能不包含像DOM,Html5 Api等任何瀏覽器API。它主要基於js引擎功能。

另一個大問題,在python中評估代碼的原因是什麼?