0

だから私は、http://www.amazon.com/Code-Cloud-Pragmatic-Programmers-Chu-Carroll/dp/1934356638/ref=sr_1_1? ie=UTF8&qid= のような詳細ページを解析するソリューションを探しています。 1359231803&sr=8-1&keywords=code+in+the+cloudですが、ページから適切なコンテンツを取得できません。

要素を調べて、「btAsinTitle」という名前で ID を見つけました。これは、Amazon.com の製品詳細ページからタイトルを取得する必要があると思われますが、明らかに、PHP には何も表示されません。それに加えて、Amazon.com 側の外部リソースから JavaScript をプルするなど、外部リソースを介してロードされていないこともわかりました (ただし、100% 確実ではありません)。私がしたことは、ロードされたドキュメントを見て、私が探している適切な「btAsinTitle」ID を含む、上記で提供した正確な URL にドキュメントがロードされているようです。

これは、詳細を解析するための小さな課題の最初のステップです。著者、価格、入手可能性 (製品の在庫があるかどうか) など、他にも必要な基準がいくつかあります。以下は、現時点で実行しようとしているスニペットです。

また、この質問に対する追加の好奇心ですが、スクレイピングを防ぐために使用できるテクニックは何ですか?また、Amazon が製品ページのスクレイピングを防いでいる可能性はありますか? それ以外に、API を使用できることも知っていますが、API を使用せずに割り当てルールを遵守しようとしています。また、割り当ての API キーも登録しています。前もって感謝します!

class AmazonBook {
protected $doc;

public $url;
public $title;
public $author;
public $price;
public $availability;

public function __construct($url) {
    $this->url = $url;

    $this->set_dom();
    // $this->set_availability();
    // $this->set_price();
    // $this->set_author();
    $this->set_title();
}


// Sets the title
protected function set_title() {
    var_dump($this->doc->getElementById('btAsinTitle'));
    die();

    // foreach ($this->doc->getElementsByTagName('span') as $span) {
    //  var_dump($span->nodeValue);
    // }
    // die();
}

// Sets the DOM
protected function set_dom() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->url);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1');

    $this->doc = new DOMDocument();
    @$this->doc->loadHTML(curl_exec($ch));
}
}

// Test code
$url = 'http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=code%20in%20the%20cloud';
$code_in_cloud = new AmazonBook($url);
4

0 に答える 0