2017-03-16 3 views
-1

私はScrapyを使用して、ストリームページを間抜けでクロールしようとしています。問題は、htmlリクエストが有用なURLを返さないことです。私は、コンテンツが何らかの形で後からロードされた理解最初のhttp要求時にhtml本文が空で、内容がさまざまなスクリプトによって読み込まれたtwitch.tvをクロールするには

<body> 
    //some stuff 
    <div id='flyout'> 
     <div class='point'> 
     </div> 
     <div class='content'> 
     </div> 
    </div> 
</body> 

、それが行われていた方法を見つけ出すことができませんでした:たとえば、メインページをtwitch.tvするwgetコマンドで、私は空のbodyタグを取得します。任意のアイデア、提案?ありがとう!!!

+0

あなたはセレンを使用する必要があります –

+0

@whale_stewardセレン/スキルのコンボが行く方法であるかどうかわからない場合は、セレンの非同期リクエスト処理の利点を失います。完全な本格的なブラウザを必要とするのに便利ではない –

+0

セレンは、Webブラウザがページを取得する方法をレンダリングするので、取得する方法です。しかし、もしツイッチがAPIを提供していれば、APIにアクセスするだけで、セレンを使用する必要はありません。 –

答えて

0

開発ツールを開いたままブラウザを開くこともできます。ネットワークタブをクリックしてtwitch.tvに移動し、すべてのリクエストを調べて、どのリクエストがコンテンツのどの部分を提供しているかを確認し、必要なコンテンツに絞り込みます(下の例では、リクエストURLはリクエストhttps://api.twitch.tv/ {エンドポイントへのパス}/{エンドポイントの名前} {エンドポイント=値}の形式に変換します。例:

ホームページのおすすめコンテンツのすべてのデータを取得したい場合は、twitch.tvでクロールを開始する代わりに、代わりにhttps://api.twitch.tv/kraken/streams/featured?limit=6&geo=US&lang=en&on_site=1にアクセスして、JSON形式のデータso:

{"_links": 
    {"self":"https://api.twitch.tv/kraken/streams/featured?geo=US&lang=en&limit=6&offset=0", 
    "next":"https://api.twitch.tv/kraken/streams/featured?geo=US&lang=en&limit=6&offset=6"}, 
    "featured":[ 
     {"text":"<p>SNES Super Stars is a 11-day speedrun marathon devoted to the Super Nintendo Entertainment System. From March 10th-20th, watch over 200 games being beaten amazingly fast and races between some of the top speedrunners in the world!</p>\n\n<br>\n\n\n<p><a href=\"/speedgaming\">Click here</a> to watch and chat!</p>\n\n<p><a href=\"communitysuccess,speedrun\"></a></p>\n", 
     "title":"SNES Super Stars Marathon", 
     "sponsored":false, 
     "priority":5, 
     "scheduled":true, 
... 

あなたはそこからのリンクをたどることができます。また、そのリクエストのヘッダーをエミュレートする必要があります。したがって、上記の例は、リクエストヘッダにclient-idを指定しないかぎり、元のリクエストのヘッダーから取得する可能性があります。サイトのすべてのセクションや機能にアクセスできる可能性のある独自のAPIエンドポイントがある可能性があります。これらのピクチャやビデオを一種のWin-Winに仕上げる必要がないため、単なるサーバーでは簡単です。また、URLの終わりにクエリ引数の一部がある場合は、返されるアイテムの数を制限することができます(limit = 6)。

エンドポイントのために掘り起こす必要がありますが、それはあなたが望むものを得るはずです。しかし、何らかの理由で実際にjavascriptを動的に処理する必要があり、治療のエコシステム内に滞在しながらセレンでブラウザを自動化したくない場合は、scrapinghubのスプラッシュプロジェクトもあります。

関連する問題