0

我正在尝试从 Amazon URL 加载 html 文件,以使用 Yii 上的简单 php 函数提取产品价格。我开始使用 php 函数获取整个文件file_get_contents,然后使用 DOM 从我的 html 文件中提取价格。

我正在使用 DOM 解析器来读取 HTML 文件。它具有方便的功能来读取 html 文件的标签。这是解析器:

http://simplehtmldom.sourceforge.net/

php 分析的 URL 可以是 amazon.com、amazon.co.uk、amazon.it 等。将来这个功能也将用于分析与亚马逊不同的其他 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 日志文件,但一切都很好。

亚马逊可以在一定时间后阻止我的请求吗?我该如何解决?

在此先感谢您的帮助

4

1 回答 1

1

我遇到了同样的问题,这是我的解决方法:如果未解析图像,我会再次运行脚本。图像首先在我的 php 脚本中解析,所以我检查它是否有效,亚马逊提供信息。我希望它有所帮助。

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 回答