Запрос DOMXpath не извлекает элементы tdPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Запрос DOMXpath не извлекает элементы td

Сообщение Anonymous »

У меня есть программа, которая извлекает цены на акции с сайта Yahoo и сохраняет их в базе данных. Это работало нормально до сегодняшнего дня, когда запрос domXPath не смог извлечь элементы td. Я проверил соответствующую веб-страницу и обнаружил, что таблица есть (только одна таблица). Я не вижу, что не так с моим кодом. Любые предложения будут приветствоваться.
Мой код выглядит следующим образом (обратите внимание, что URL-адрес введен ранее):

Код: Выделить всё

$base = $yahooURL;
// use cURL to download contents of the web page with share price history on it.
$curl = curl_init();
$config['useragent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36';
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $base);
curl_setopt($curl, CURLOPT_USERAGENT, $config['useragent']);
curl_setopt($curl, CURLOPT_REFERER, 'https://www.cappleby.net.au/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$page = curl_exec($curl);
curl_close($curl);

$elements[] = 0;
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($page);
libxml_clear_errors();

$x = new DOMXpath($dom);
$i = 0;

$names[] = 0;
$elements = array();

//Extract title of page - company name
foreach($x->query('//title') as $title){
$names[$i] = $title -> textContent." ";
$i++;
}
$name = $names[0];
$name = preg_replace('/ stock(.*?) Yahoo Finance/','',$name);

//Extract the last day's price details and put in array for analysis later
$i = 0;

foreach($x-> query('td') as $td){
foreach($tds as $td){
$elements[$i] = $td -> textContent." ";
$i++;
}

$x = 0;
$today = date('Y-m-d');
while(floatval(str_replace( ',', '', $elements[$x + 1])) == '-')$x = $x + 7;
$date = date( "Y-m-d", strtotime($elements[$x + 0]));
$title извлекается правильно, но не $elements. Я получаю предупреждение о том, что во второй последней строке выше находится неопределенный ключ массива 1, что указывает на то, что массив $element пуст.
Я пробовал различные альтернативы $elements[$i ] = $td -> textContent." "; например значение узла. также foreach($x-> query('//td') as $td) Я также пробовал использовать $tds = $x->query('//tr/td') с последующим foreach($tds as $ тд) безуспешно. Я также некоторое время назад перешел на использование cURL вместо getHTML, поскольку последний перестал работать.

Подробнее здесь: https://stackoverflow.com/questions/790 ... d-elements
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»