サードパーティに代わってパスワードで保護されたサイトをスクレイピングする最適な方法は?

StackOverflow https://stackoverflow.com/questions/801115

質問

私はあなたのファンタジー野球チームを分析し、1日あたり複数回、推奨されるアクションを通知するプログラムを書きたいです。問題は、私のサイトでファンタジー野球をしているのではなく、yahoo、cbs、またはespnなどで遊んでいるということです。

これらのサイトの大部分では、ファンタジーチームとリーグは公開されていないため、リーグのチームを表示するには、ログインしてリーグのメンバーである必要があります。

必要なのは、各サイトのチームページをサーバーに送信するためのプレーンなhtmlだけです。サーバーでは、ファイルを解析および分析し、ユーザー通知を送信できます。

問題は、このデータを必要なときにサーバーに簡単に取得するためにユーザー名とパスワードの組み合わせが必要なことです。私のyahoo / espn / cbsパスワード。

この問題を解決するためのいくつかの可能な方法を思いつきました:

  1. 最も明白な方法は、チームがホストされているサイトの資格情報を要求することです。その後、プログラムでログインして必要なデータを要求するだけでした。多くの人が自分の資格情報を提供しても問題ないと思うのですが、それほど多くはありません。

  2. デスクトップクライアントを作成し、ユーザーはそれをダウンロードします。クライアントは資格情報を要求しますが、基本的にはサーバーベースのバージョンとまったく同じことを行い、ログインし、ページを要求し、ページをサーバーに送り返すことができます。違いは、パスワードをデスクトップから離れる必要がないことです。コンピューターの電源が入っていて、このメソッドが機能するためにこのプログラムが実行されている必要があります。

  3. 必要なページに移動するブラウザーアドオンを作成し、以前のログインで保存されたCookieを使用してサイトにログインし、ページをサーバーに送り返します。これは私のソフトウェアにパスワードを要求する必要はありませんが、クッキーの有効期限が切れると私はうんざりし、ブラウザのアドオンについてはあまり知りません。

他のオプションもあると確信していますが、これらはこれまでに考え出したものです。

2つの質問があります。 1.このタイプのタスクの他の可能性は何ですか? 2.私は彼らのyahoo(例えば)パスワードを私に与えたがらないという人々の不満を過大評価していますか?オプション(1)は明らかな選択肢の上にありますか?

コメントで、ヤフーパイプを試すことが提案されましたが、それは有望な提案のように見えたので、少し調べました。 これを見てみると、これは選択肢ではないと思います。そのため、オプション1を使用する予定です。

役に立ちましたか?

解決

これは、数年前に私が同じことをしたかったときに取り組んだ問題です。私たちのサイトは http://benchcoach.com であり、検討していたオプションは次のとおりです。

元のユーザーの資格情報とログインの取得を検討しました。次に、ログインしてリーグとチームの情報を取得します。そこにある問題は、さまざまな利用規約のいくつかを読んだ後、これが間違いなく利用規約に違反することです。さらに、Yahoo!間違いなく私たちが検討していたサイトの1つであり、ユーザーは電子メール(機密データにアクセスできる場所)を持ち、Yahoo!財布。さらに、Yahoo / ESPN / CBSがIPアドレスでプログラムによるログインをブロックすることは、ささいなことです。

私たちが解決したソリューション(100%満足ではありませんが、うまくいくようです)は、現在のhtmlページをサーバーに投稿するブックマークレット(delicious、digg、redditなど)のインストールをユーザーに要求することでした。データを解析し、データベースをロードします。 Yahoo / ESPN / CBSアカウントにまだログインしている場合は、直接ページに誘導します。そうでない場合は、それらのサイトが認証を求めます。ブックマークレットをもう一度クリックすると、サーバーにページが投稿されます。

このアプローチの長所は、誰の資格情報も収集しなかったため、セキュリティに関する懸念が軽減されることでした。第二に、Yahoo / ESPN / CBSがサーバーに直接接続することはなく、ユーザーのブラウザーがブラウザーのコンテンツをサーバーに投稿するため、Yahoo / ESPN / CBSがサービスへのアクセスをブロックすることができなくなります。

これに関する問題は、私たちのサイトにページを投稿するのに2クリックかかることです。直接対戦するリーグの場合、ユーザーがリーグをサーバーに同期するには6〜8回クリックする必要があるため、3〜4ページ必要でした。私たちはまだこのオプションを検討しています。

重要な注意点の1つは、1年前の会議でYahoo Fantasy Footballサイトのプロダクトマネージャーに出会ったことです。ヤフーのデータを取得する方法について話しました。彼は、資格情報を取得するとTOSに違反し、停止する可能性があることを確認しました。私は彼らが持っているとは思わないかもしれませんが、これを開発するために時間とエネルギーを投資するのは難しく、彼らが私たちのサイトをブロックし、アカウントを閉鎖することでユーザーを怒らせるだけです。

他のヒント

(たとえば)ヤフーパイプを使用すると、おそらくより複雑な答えが得られる可能性があります。

仮に、ユーザーに資格情報の入力を求めるパイプを作成し、スクレイプされたデータを含むURLをユーザーに提供します。サイトにこのURLを入力し、資格情報を直接提供する必要はありません。さらに良いことに、セキュリティを重視する場合は、情報を入力する前にパイプが実際に何をしていたかを調べることができます。

欠点は、複雑さが増すことです(また、パイプを記述して保守する必要があります)。そうは言っても、できる限り簡単にするために、サイトから公開されたパイプへの直接リンクを提供できます。

オプション1は当然の選択です。サイトを信頼する人々が詳細を提供します。スクリーンスクレイピング中に他のサイトにログインする方法は他にありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top