だから私は、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);