1

Scrapy を使用して、Web サイトにフラッシュ コンテンツがあるかどうかを実際に確認しています。次のコードを使用します。

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')

ウェブサイトにあると確信している場合、要素は選択されません。ありがとう

4

1 に答える 1

1

ほとんどの場合、埋め込み要素は、いくつかのJSコードを実行した後に存在します。YouTubeビデオでscrapyshellを実行してみましたが、あなたと同じ問題に直面しました。この問題は、SeleniumなどのJSコードを実際に実行するライブラリを使用することで回避できます。これは、通常のスクレイプスパイダー内で使用できるサンプルコードです。

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")

コードの最後の行を実行した後、要素が表示されますが、scrapyhxsでは表示されませんでした。このソリューションを使用することになった場合は、Seleniumをscrapyと統合するためのこのスニペットが役立つはずです。

于 2013-02-25T04:30:26.057 に答える