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”的名称找到并标识了该名称应该从该 Amazon.com 产品详细信息页面中获取标题,但显然,PHP 中没有出现任何内容。除此之外,我还发现它不是通过外部资源加载的,比如从 Amazon.com 端的外部资源拉入的 JavaScript(不过,我并不完全 100% 确定)。我所做的是查看已加载的文档,并且似乎已在我上面提供的确切 URL 上加载了一个文档,其中包含我正在寻找的正确“btAsinTitle”ID。

这真的是我解析细节的小任务的第一步。我还需要一些其他标准,包括作者、价格、可用性(产品是否有库存)。下面是我目前正在尝试运行的代码段。

另外,对于这个问题还有一个额外的好奇,有哪些技术可以用来防止抓取,亚马逊是否有可能阻止他们的产品页面被抓取?除此之外,我也知道我可以使用 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