2015-12-15 107 views
3

我試圖使用JavaScript中生成的Python動態內容(此視頻上的視圖和註釋的數量:http://v.youku.com/v_show/id_XMTM5NTI3NDY3Ng==.html?from=y1.3-idx-uhome-1519-20887.205805-205902.5-2)進行刮擦。使用python快速刮取動態內容

我對BeautifulSoup(在0.1秒內運行,但沒有JavaScript評估)和Selenium(3+秒,甚至當我停用CSS,圖像等,但解釋JS)都很熟悉。

有沒有一種方法可以在沒有實際使用瀏覽器的情況下在Python中捕獲JavaScript函數的結果(假設這會降低Selenium的速度)?

我的硒代碼如下:

# coding=utf-8 

import time 
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.common.keys import Keys 

firefox_profile=webdriver.FirefoxProfile() 
#firefox_profile.set_preference('permissions.default.stylesheet',2) 
firefox_profile.set_preference('permissions.default.image',2) 
firefox_profile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so',2) 
driver = webdriver.Firefox(firefox_profile=firefox_profile) 
time.sleep(7) 

start=time.time() 
def getYoukuVideoStats(youkuVideoUrl): 
    driver.get(youkuVideoUrl) 
    text= driver.find_element_by_id("allnum_cmt").text 
    print text 

youku_video_urls_full=["http://v.youku.com/v_show/id_XOTU2Nzc3NDYw.html"] 

for youkuVideoUrl in youku_video_urls_full: 
    try: 
     getYoukuVideoStats(youkuVideoUrl) 
     print youkuVideoUrl 
    except Exception, e: 
     print "Error with video: "+youkuVideoUrl 
     print str(e) 

print time.time()-start 

回答

3

沒有,有沒有辦法湊的js代碼的結果,而不使用瀏覽器,無論是可見或不可見(phantomjs)之一。

4

您確實需要使用瀏覽器來呈現JS,但是您可以使用諸如phantomjs之類的無頭瀏覽器。這會加快你的運行時間,你不會看到瀏覽器打開。

3

你也可以使用splash這使得JavaScript渲染變得容易,使它像一個服務,所以你繼續使用它像抓取一個正常的網站。

對於python網頁抓取來說,它的效果非常好,scrapy