0

Yii で単純な php 関数を使用して、Amazon の URL から html ファイルを読み込んで製品価格を抽出しようとしています。php function を使用してファイル全体を取得し始めfile_get_contents、DOM を使用して html ファイルから価格のみを抽出しました。

HTML ファイルを読み取るために DOM パーサーを使用しています。htmlファイルのタグを読み取る便利な機能があります。これはパーサーです:

http://simplehtmldom.sourceforge.net/

PHP が分析する URL は、amazon.com、amazon.co.uk、amazon.it などです。将来的には、この機能を使用して、Amazon 以外の URL を分析する予定です。

URL から価格を抽出する単純な関数を作成しました。

public function findAmazonPriceFromUrl($url) {
    Yii::import('ext.HtmlDOMParser.*');
    require_once('simple_html_dom.php');

    $html = file_get_html($url);
    $item = $html->getElementsById('actualPriceValue');
    if ($item) {
        $price = $item[0]->firstChild()->innertext;
    } else {
        $item = $html->getElementsById('current-price');
        $price = $item[0]->innertext;
    }
    return $price;
}

file_get_html機能は次のとおりです。

function file_get_html($url) {
    $dom = new simple_html_dom();
    $contents = file_get_contents($url);
    if (empty($contents) || strlen($contents) > MAX_FILE_SIZE) {
        return false;
    }
$dom->load($contents);
return $dom;

}

いくつかのリクエスト (さまざまなリンク) の後、サーバーから常にエラー (エラー 500) が返されることに気付きました。Apache ログ ファイルを確認しましたが、すべて問題ありません。

Amazon は一定時間後に私のリクエストをブロックできますか? どうすれば修正できますか?

助けてくれてありがとう

4

1 に答える 1

1

私は同じ問題を抱えていましたが、これが私の修正です。画像が解析されていない場合は、スクリプトを再度実行します。私のphpスクリプトで画像が最初に解析されるので、それが機能するかどうかを確認し、Amazonが情報を提供します。お役に立てば幸いです。

if($html->find('#main-image')) {    
   foreach($html->find('#main-image') as $e) {
      echo '<span href="'. $e->src . '" class="imgblock parseimg">
               <img src="'. $e->src . '" class="resultimg" alt="'.$name.'" title="'.$name.'">
            </span>
            <input type="hidden" name="my-item-img" value="'. $e->src . '" />';
   }
} else {
   gethtml($url,$domain);
   die;
}
于 2015-06-03T19:59:30.100 に答える