Intereting Posts
Есть ли алгоритм для вывода всех возможных комбинаций двух наборов элементов? Удаление последней запятой в PHP? Анонимные рекурсивные функции PHP Push-уведомление успешно отправлено, но устройство не получает (иногда) Ответ массива в WSDL – SOAP PHP как перезагрузить мою php-страницу каждые 2 минуты с помощью javascript? Есть ли способ переключить «Скрытые» или «Только для чтения» в файл Windows с помощью PHP? Как преобразовать HTML в JSON с помощью PHP? как получить значения переключателя, который был проверен, jquery Где я могу изучить веб-программирование от начала до мастерства? Symfony 3.1 и OneUpUploaderBundle + FineUploader = UploadListener не вызывается Вызовите 1 вид в Codeigniter, но поделитесь заголовком / нижним колонтитулом между всеми представлениями? Как я могу отправить XML SOAP через Curl и PHP? Mongodb php получает идентификатор нового документа? Интеграция WordPress Post с Cakephp3

Dom and XPath scraping – Что здесь не так?

Мне нужно очистить длину текста с веб-страницы из Интернета, я использую dom и xpath, чтобы найти данные, однако я не могу выбрать точную информацию, в которой я нуждаюсь. Вот мой код до сих пор, проблема связана с разделом item (0) -> nodeValue – это работает для моих других скрепок, которые у меня есть для другой страницы, но не для этого.

$argos_html = file_get_html('http://www.argos.co.uk/static/Product/partNumber/9282197/Trail/searchtext%3EIPOD+TOUCH.htm'); $dom_argos= new DOMDocument(); $dom_argos->loadHTML($argos_html); $xpath_argos = new DOMXpath($dom_argos); $expr_currys = "/html/body/div[4]/div[3]/form/div[2]/div/div[5]/ul/li[3]/span"; $nodes_argos = $xpath_argos->query($expr_argos); $argos_stock_data = $nodes_argos->item(0)->nodeValue; 

Может ли кто-нибудь показать мне, где я ошибаюсь? потому что я всегда получаю ошибку, относящуюся к -> item (0) -> nodeValue; часть, однако, если я прокомментирую это, theres нет ошибки, но theres нет данных, собранных вообще …

Если это возможно просто -> nodeValue;

Я понимаю, что это может быть до структур страниц, но я новичок во всем этом! Спасибо

Related of "Dom and XPath scraping – Что здесь не так?"

Запустив код, я сначала получаю:

 Notice: Undefined variable: expr_argos Warning: DOMXPath::query() [domxpath.query]: Invalid expression 

Итак, прежде всего, убедитесь, что вы используете что-то действительное для вашего запроса XPath – например, вы должны иметь это:

 $nodes_argos = $xpath_argos->query($expr_currys); 

вместо того, что вы в настоящее время имеете:

 $nodes_argos = $xpath_argos->query($expr_argos); 

Затем вы получите следующую ошибку:

 Notice: Trying to get property of non-object 

на следующей строке:

 $argos_stock_data = $nodes_argos->item(0)->nodeValue; 

В принципе, это означает, что вы пытаетесь прочитать свойство nodeValue на том, что не является объектом: $nodes_argos->item(0);

Я предполагаю, что ваш запрос XPath недействителен; поэтому вызов метода xpath() не возвращает ничего интересного.

Вы должны проверить свой (довольно длинный, чтобы быть понятным) запрос XPath, убедившись, что он соответствует чему-то на вашей HTML-странице.

Ваш XPath отлично работает, когда я использую его в Firefox, но он не будет работать с DOM, что неудивительно. Я предполагаю, что у вас есть XPath с каким-то браузером, способным возвращать путь для определенных элементов. Однако вам не следует доверять XPaths, возвращаемым плагинами браузера, поскольку браузеры будут изменять DOM с помощью JavaScript и добавлять необходимые значения там, где это необходимо. Вместо этого используйте исходный код источника.

Ваш XPath оценивает «Домой доставка в течение 2 дней» в Firefox, чего я не ожидал от переменной «stock_data». Но в любом случае это должно сделать это:

 $dom = new DOMDocument; libxml_use_internal_errors(TRUE); $dom->loadHTMLFile('http://www.argos.co.uk/static/Product/partNumber/9282197/Trail/searchtext%3EIPOD+TOUCH.htm'); libxml_clear_errors(); $xpath = new DOMXpath($dom); $nodes = $xpath->query( '/html/body//div[@id="deliveryInformation"]/ul/li[@class="home"]/span' ); echo $nodes->item(0)->nodeValue; // "Home delivery within 2 days"