Здравствуйте, подскажите пожалуйста пытаюсь получить содержимое страницы Код (Text): dom = new DOMDocument; $dom->loadHTML($url); foreach ($dom->documentElement->childNodes as $node) { echo $node->nodeName; echo '<br>....<br>'; echo print_r( $node ); } как получить элементы содержащиеся в body? echo $dom->getElementsByTagName("body")->childNodes; ничего возвращает $xpath = new DOMXpath($dom); DOMXPath Object ( [document] => (object value omitted) ) значение объекта опущено что значит : (object value omitted) ) значение объекта опущено?
getElementsByTagName возвращет список элементов. У этого объекта нет свойства childNodes. Получить элемент списка можно по его индексу в списке. https://php.ru/manual/domnodelist.item.html
Дело в том что я добавляю на страницу новый элемент echo"<div id=12>!!!!!!</div>"; и он отсутствует, body есть в гугле есть а в DOMElement нету
Как Вы это делаете? Есть к примеру такие методы: https://php.ru/manual/domdocument.createelement.html https://php.ru/manual/domnode.appendchild.html
Да так и делаю Код (Text): echo " <a href='index.php?id=3'>Авторизация</a>"; //добавляется на страницу в гугле посмотреть есть echo "<div id=12>!!!!!!</div>"; а нужно по правила dom очевидно но все равно как прочитать правильно из body? Код (Text): echo " <a href='index.php?id=3'>Авторизация</a>"; //добавляется на страницу в гугле посмотреть есть echo "<div id=12>!!!!!!</div>"; dom = new DOMDocument; $dom->loadHTML($url); foreach ($dom->documentElement->childNodes as $node) { echo $node->nodeName; //получаю body а как из боди получить вложение echo '<br>....<br>'; echo print_r( $node ); echo print_r( $node->ownerDocument ); } вывод такой теги что можно использовать DOMDocument Object ( [doctype] => (object value omitted) [implementation] => (object value omitted) [documentElement] => (object value omitted) [actualEncoding] => [encoding] => [xmlEncoding] => [standalone] => 1 [xmlStandalone] => 1 [version] => [xmlVersion] => [strictErrorChecking] => 1 [documentURI] => [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [nodeName] => #document [nodeValue] => [nodeType] => 13 [parentNode] => [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => [textContent] => http://r91933pi.beget.tech/ ) 1 .... DOMElement Object ( [tagName] => body [schemaTypeInfo] => [nodeName] => body [nodeValue] => http://r91933pi.beget.tech/ [nodeType] => 1 [parentNode] => (object value omitted) [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [attributes] => (object value omitted) [ownerDocument] => (object value omitted) [namespaceURI] => [prefix] => [localName] => body [baseURI] => [textContent] => http://r91933pi.beget.tech/ ) 1 но все равно source <a href='index.php?id=3'>Авторизация</a><div id=12>!!!!!!</div><br>....<br>DOMDocument Object ( [doctype] => (object value omitted) [implementation] => (object value omitted) [documentElement] => (object value omitted) [actualEncoding] => [encoding] => [xmlEncoding] => [standalone] => 1 [xmlStandalone] => 1 [version] => [xmlVersion] => [strictErrorChecking] => 1 [documentURI] => [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [nodeName] => #document [nodeValue] => [nodeType] => 13 [parentNode] => [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => [textContent] => http://r91933pi.beget.tech/ ) 1<br>....<br>DOMElement Object ( [tagName] => body [schemaTypeInfo] => [nodeName] => body [nodeValue] => http://r91933pi.beget.tech/ [nodeType] => 1 [parentNode] => (object value omitted) [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [attributes] => (object value omitted) [ownerDocument] => (object value omitted) [namespaceURI] => [prefix] => [localName] => body [baseURI] => [textContent] => http://r91933pi.beget.tech/ )
Метод loadHTML() парсит html из строки текста. То есть в него надо передавать html-код. Если надо загрузить html из файла, то используется loadHTMLFile(), в который передается адрес файла с html
Проверьте что выдаст такой код в Вашем случае: PHP: $doc = new DOMDocument(); $doc->loadHTMLFile($url); $tags = $doc->getElementsByTagName('body'); var_dump($tags->item(0));
[offtopic] Наверное надо просить Одмина удалить раздел "Для профи". вот написано в тирлайне PHP для профи Темы повышенной сложности. Новичкам здесь не место. Но участники понимают это место как "вопрос нуба к профи". Типа это повысит шанс на квалифицированную помощь. Хехе. Короче полное фиаско с разделением тем по уровням сложности. Это не работает! Надо слить к черту Для новичков, Для профи и Прочее. Чтобы всё было в "прочее, не нашедшее специального раздела". @Administrator fyi [/offtopic]
Да ты в натуре супер стар нет чтобы подсказать тему раскрыть ON за власть борется Ксарю Кесарь а богу богово Код (Text): header("Content-Type: text/html; charset=utf-8"); include("simple_html_dom.php"); //$dom = new DOMDocument; echo " <a href='index.php?id=3'>Авторизация</a>"; echo "<div id=12>!!!!!!</div>"; $url="http://***"; $html=file_get_contents_curl($url); $dom=new DOMDocument(); @$dom->loadHTML($html); foreach ($dom->documentElement->childNodes as $node) { echo "node:",$node->nodeName,"<br>"; if( $node->childNodes) { foreach ($node->childNodes as $node2) { echo "node2:",$node2->nodeName,"<br>"; } } } //##################################################### function file_get_contents_curl($url) { $ch=curl_init(); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); $data=curl_exec($ch); curl_close($ch); return $data; }
зачем ? подключить ради просто так ? а в один вывод слабо наверно сделать и почитать тривиальное понимание абсолют и относительные пути браузера. да ты любишь "ой впи3дy", добавив перед всем этим собачку @, а не решать проблему по мере ее появления. В жизни так же "ой впи3дy" ? Если не в курсе - добавив к протоколу окончание S, ты решишь пол бед в будущем.
Когда угомонишься и апнешь IQ, добро пожаловать. Много на тебя текста хотел накатать... не достоин увы.
я бы на месте профессионалов, дающих советы по грабу, спрашивал со своего ли ресурса ТС производит парсинг, а то наверное советникам приятно, чтобы граб производился с их сайтов по их же советам )))