1

我正在使用 Scrapy 来实际了解网站中是否有任何 Flash 内容。我使用以下代码:

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)

但总是返回假。我意识到即使我使用

 hxs.select('//embed')

当我确定网站中有任何元素时,它不会选择任何元素。谢谢

4

1 回答 1

1

很可能在执行一些 JS 代码后出现了 embed 元素。我尝试在 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 我没有。如果你最终使用了这个解决方案,这个将 Selenium 与 scrapy 集成的片段应该会有所帮助。

于 2013-02-25T04:30:26.057 回答