Мне нужно очистить длину текста с веб-страницы из Интернета, я использую 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;
Я понимаю, что это может быть до структур страниц, но я новичок во всем этом! Спасибо
Запустив код, я сначала получаю:
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"