2011-01-04 12 views
2

私は情報を収集する必要がある約2000の製品があるため、時間を節約するためにサプライヤーのmagentoサイトを削っています。私はかなりスクラップを書いても大丈夫ですが、大きな問題に遭遇しました。私はget_file_contentを使用して、製品ページのhtmlを収集しています。PHP Magento Screen Scraping

問題がある:

あなたは、製品ページを表示するために、ログインする必要があります。その標準的なマゼンタのログイン、私はどのように私の画面スクレーパーでこれを丸めることができますか?私は完全なスクリプトを必要としません、メソッドのアドバイスだけです。

+0

それは違法です。適切なフォーマットで料金表をお送りください。 – zerkms

+1

違法ではありません。まったくソースと、コンテンツ制作者からの使用条件、t + c、または明示的な許可を含めて、あなたが与えたstatuatoryパーミッションに依存します。画面のスクレープは、製品の更新を自動化する方法になります。とにかくありがとう。 – gunwin

+0

あなたは私たちにサイトへのURLを与えることができますので、スクリーンスクレイピングを許可するTOSを見ることができますか? – zerkms

答えて

2

stream_context_createを使用すると、file_get_contentsを呼び出すときに送信されるヘッダーを指定できます。

私が提案しているのは、ブラウザを開いてサイトにログインすることです。 Firebug(またはあなたのお気に入りのCookieビューア)を開き、クッキーをつかんであなたの要求に応じて送ってください。

編集:ここではPHP.netからの例です:

<?php 
// Create a stream 
$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" 
) 
); 

$context = stream_context_create($opts); 

// Open the file using the HTTP headers set above 
$file = file_get_contents('http://www.example.com/', false, $context); 
?> 

編集(2):これは、あなたの質問の範囲外ですが、その後のウェブサイトをこすりする方法を不思議に思っているならば、あなたが見ることができますメソッドDOMDocument::loadHTMLに変換します。これにより、必要な機能(つまり、XPath querygetElementsByTagNamegetElementsById)が得られます。

単純なものを削りたい場合は、preg_match_allでRegExを使用することもできます。

+0

非常に便利です、おめでとうございます。私はpreg_matchを使ってページを解析しています。あなたの星! – gunwin

+0

私はちょうど、ログインがまだどのように働いているかを閉鎖的に見ていましたが、セッション変数を使用してログインが登録されていればどうでしょうか? – gunwin

+0

Magentoがセッションを使用する場合、セッションID(ほとんどの場合)はCookie PHPSESSIDに格納されます。だから基本的に '' header '=>' Cookie:PHPSESSID = ... \ r \ n "'を実行するだけです。セッションが期限切れになることを覚えておいてください。長時間掻き回している場合は、最終的にCookieを更新する必要があります。 –

0

CURLに精通している場合、これは1日程度で比較的簡単に行うことができます。私は銀行にログインしてデータを取得する類似のアプリをいくつか作成しました。もちろん認証が必要です。以下は

認証目的のためにクッキーとCURLを使用する方法の一例とのリンクです:あなたは正規表現を使用して結果を解析できるページの出力をつかむことができる場合

http://coderscult.com/php/php-curl/2008/05/20/php-curl-cookies-example/

。また、あなたはあなたのためにこの仕事をするためにスヌーピーのようなクラスを使用することができます。

http://sourceforge.net/projects/snoopy/