2013-02-23 48 views
1

我正在使用Scrapy來真正知道網站中是否有任何Flash內容。我使用下面的代碼:Scrapy不會選擇嵌入元素

hxs = HtmlXPathSelector(response) 

(len(hxs.select('//embed[contains(@src,".swf")]')) > 0 or len(hxs.select('//object[contains(@data,".swf")]')) > 0 or len(hxs.select('//object/param[contains(@value,".swf")]')) > 0) 

但總是返回false。 我意識到,即使我用

hxs.select('//embed') 

它不會選擇任何元素時,我敢肯定,沒有在網站上。 謝謝

+0

在執行JS代碼之前確定元素是否存在? – wRAR 2013-02-23 22:58:17

+0

向我們展示您的目標XML – JWiley 2013-02-24 04:02:23

回答

1

在執行一些JS代碼後,最有可能出現嵌入元素。我試圖在YouTube視頻上運行scrapy shell,並面臨與您同樣的問題。您可以通過使用實際執行JS代碼的庫(如Selenium)來解決此問題。以下是一些示例代碼,您可以在正常的scrapy蜘蛛中使用它們。

import time 
from selenium import webdriver 

browser = webdriver.Firefox() 
browser.get('https://www.youtube.com/watch?v=e_44G-kE8lE') # Load page 
time.sleep(3) # Make sure we had enough time to load everything 
browser.find_elements_by_xpath("//embed") 

運行最後一行代碼後,我確實看到了一個元素,而對於scrapy hxs,我沒有。如果你最終使用這個解決方案this snippet集成硒和scrapy應該是有幫助的。