2015-12-15 101 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