2013-02-23 2 views
1

Я использую Scrapy, чтобы узнать, есть ли флеш-контент на веб-сайте. Я использую следующий код: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) 

но всегда возвращает ложь. я понял, что даже если я использую

hxs.select('//embed') 

не будет выбрать любой элемент, когда я уверен, что есть на сайте. Thanks

+0

Вы уверены, что элементы присутствуют перед выполнением JS-кода? – wRAR

+0

Покажите нам XML, на который вы нацеливаете – JWiley

ответ

1

Скорее всего, элемент embed присутствует после выполнения некоторого кода JS. Я попробовал запустить scrapy shell на видео с youtube и столкнулся с той же проблемой, что и вы. Вы можете обойти эту проблему, используя библиотеку, которая фактически выполняет JS-код, такой как Selenium. Вот пример кода, который вы можете использовать в своих обычных пауках.

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 для интеграции селена со скрипом.

Смежные вопросы