2015-08-11 1 views
0

Я пытаюсь получить цены в качестве продукта Amazon. Я попробовал 2 метод:PHP/соскоб - Получить цену амазонки продукта

  1. file_get_contents -> регулярного выражение ->это работает.
  2. используя DOMXPath ->нет работа по причине.

Я заметил, что если Javascript включен XPath цены отличается от XPath, а Javascript отключен.

В любом случае, как я могу получить цену, используя xpath?

Это то, что я делаю, но код не возвращает ничего (даже если он работает на любом другом сайте):

(The XPath был сделан с использованием поджигателя)

$url = 'http://www.amazon.com/dp/product/B00TRQPSXM/'; 
$path = '/html/body/div[3]/form/table[3]/tbody/tr[1]/td/div/table/tbody/tr[2]'; 

$html = file_get_contents($url); 

$dom = new DOMDocument(); 
@$dom->loadHTML($html); 
$xpath = new DOMXpath($dom); 

$elements = $xpath->query($path); 

if($elements) 
{ 
    foreach($elements as $element) 
    { 
     echo $element->nodeName.'<br>'; 
     echo $element->nodeValue.'<br>'; 
    } 
} 
+1

Вы имеете дело с внешним ресурсом. никогда не предполагайте успеха. ВСЕГДА убедитесь, что f_g_c() фактически вернул полезный html. и не используйте '@' для подавления ошибок. это кодирующий эквивалент наложения ваших пальцев в уши и движение «lalalalala не слышит вас». –

+0

Как писал MarcB, это * плохая идея * (tm) задаться вопросом, почему 'dom-> loadHTML ($ html);' не работает, когда вы подавляете ошибки с ним. Веб-сайты Amazon обычно известны недействительным HTML, поэтому вам может потребоваться некоторое исправление/восстановление с ним. http://php.net/tidy/http://php.net/class.domdocument#domdocument.props.recover – hakre

ответ

1

Вашего запроса будет заблокирован после нескольких попыток каждый раз, amazon проверяет доступ к роботу. Вместо того, чтобы отказываться от своего сайта, кстати, против условий обслуживания Amazon (или того, что он называется), используйте их API, найденный по адресу http://developer.amazonservices.com. Вы получите информацию о цене, которую вы получите после: this operation.

Существует также php sdk, который вы можете использовать.

В любом случае, file_get_contents() здесь не вариант, если вы хотите очистить страницу от завитка и сделать ее похожей на уникального посетителя.

+0

Я не заблокирован. Я знаю, что могу использовать API. API имеет некоторое ограничение, и я ищу резервное решение. Неважно. Почему я не могу запросить HTML-код, возвращаемый file_get_contents с помощью xpath? На любом другом сайте он работает нормально. – priofrih

+0

Вы не получите страницу, которую вы ожидаете назад, вы получите страницу с сообщением об ошибке, пожалуйста, заполните captcha. Как заметил Марк, вы просто не видите этого, потому что вы подавляете ошибки. – baao

+0

Мой вопрос в том, что разница между file_get_contents и loadHTML методом. Это первое работает, второе - нет. – priofrih

 Смежные вопросы

  • Нет связанных вопросов^_^