2013-02-23 79 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应该是有帮助的。