За последние 24 часа нас посетил 20751 программист и 1134 робота. Сейчас ищут 336 программистов ...

Как получить содержимое уже существующей страницы страницы

Тема в разделе "Прочие вопросы по PHP", создана пользователем Conus, 23 фев 2019.

  1. Conus

    Conus Активный пользователь

    С нами с:
    21 окт 2015
    Сообщения:
    92
    Симпатии:
    0
    Здравствуйте, подскажите пожалуйста
    пытаюсь получить содержимое страницы


    Код (Text):
    1.  
    2. dom = new DOMDocument;
    3. $dom->loadHTML($url);
    4.  
    5. foreach ($dom->documentElement->childNodes as $node)
    6. {
    7.     echo $node->nodeName;
    8.     echo '<br>....<br>';
    9.     echo print_r( $node );
    10. }

    как получить элементы содержащиеся в body?

    echo $dom->getElementsByTagName("body")->childNodes; ничего возвращает


    $xpath = new DOMXpath($dom);

    DOMXPath Object ( [document] => (object value omitted) ) значение объекта опущено
    что значит : (object value omitted) ) значение объекта опущено?
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    getElementsByTagName возвращет список элементов. У этого объекта нет свойства childNodes. Получить элемент списка можно по его индексу в списке. https://php.ru/manual/domnodelist.item.html
     
  3. Conus

    Conus Активный пользователь

    С нами с:
    21 окт 2015
    Сообщения:
    92
    Симпатии:
    0
    Дело в том что я добавляю на страницу
    новый элемент
    echo"<div id=12>!!!!!!</div>";
    и он отсутствует, body есть в гугле есть а в DOMElement нету
     
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
  5. Conus

    Conus Активный пользователь

    С нами с:
    21 окт 2015
    Сообщения:
    92
    Симпатии:
    0
    Да так и делаю

    Код (Text):
    1.  
    2. echo " <a href='index.php?id=3'>Авторизация</a>"; //добавляется на страницу в гугле посмотреть есть
    3. echo "<div id=12>!!!!!!</div>";
    а нужно по правила dom очевидно
    но все равно как прочитать правильно из body?

    Код (Text):
    1.  
    2. echo " <a href='index.php?id=3'>Авторизация</a>"; //добавляется на страницу в гугле посмотреть есть
    3. echo "<div id=12>!!!!!!</div>";
    4.  
    5. dom = new DOMDocument;
    6. $dom->loadHTML($url);
    7.  
    8. foreach ($dom->documentElement->childNodes as $node)
    9. {
    10.     echo $node->nodeName; //получаю body а как из боди получить вложение
    11.     echo '<br>....<br>';
    12.     echo print_r( $node );
    13.    echo print_r( $node->ownerDocument );
    14.  
    15. }
    вывод такой
    теги что можно использовать

    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/
    )
     
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Метод loadHTML() парсит html из строки текста. То есть в него надо передавать html-код. Если надо загрузить html из файла, то используется loadHTMLFile(), в который передается адрес файла с html
     
  7. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Проверьте что выдаст такой код в Вашем случае:
    PHP:
    1. $doc = new DOMDocument();
    2. $doc->loadHTMLFile($url);
    3. $tags = $doc->getElementsByTagName('body');
    4. var_dump($tags->item(0));
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    я ему даже документацию давал, недели не хватило - дуб дубом
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    [offtopic]
    Наверное надо просить Одмина удалить раздел "Для профи". вот написано в тирлайне

    PHP для профи
    Темы повышенной сложности. Новичкам здесь не место.

    Но участники понимают это место как "вопрос нуба к профи". Типа это повысит шанс на квалифицированную помощь. Хехе. :)
    Короче полное фиаско с разделением тем по уровням сложности. Это не работает! Надо слить к черту Для новичков, Для профи и Прочее. Чтобы всё было в "прочее, не нашедшее специального раздела".

    @Administrator fyi
    [/offtopic]
     
    MouseZver нравится это.
  10. Conus

    Conus Активный пользователь

    С нами с:
    21 окт 2015
    Сообщения:
    92
    Симпатии:
    0
    Да ты в натуре супер стар
    нет чтобы подсказать тему раскрыть ON за власть борется
    Ксарю Кесарь

    а богу богово
    Код (Text):
    1. header("Content-Type: text/html; charset=utf-8");
    2. include("simple_html_dom.php");
    3. //$dom = new DOMDocument;
    4.  
    5. echo " <a href='index.php?id=3'>Авторизация</a>";
    6. echo "<div id=12>!!!!!!</div>";
    7.  
    8.  
    9. $url="http://***";
    10.  
    11.  
    12. $html=file_get_contents_curl($url);
    13. $dom=new DOMDocument();
    14. @$dom->loadHTML($html);
    15.  
    16. foreach ($dom->documentElement->childNodes as $node)
    17. {
    18.     echo "node:",$node->nodeName,"<br>";
    19.     if( $node->childNodes)
    20.         {
    21.        
    22.             foreach ($node->childNodes as $node2)
    23.                 {
    24.                         echo "node2:",$node2->nodeName,"<br>";
    25.                      
    26.                 }
    27.        
    28.        
    29.         }
    30. }
    31.  
    32.  
    33. //#####################################################
    34. function file_get_contents_curl($url)
    35. {
    36.     $ch=curl_init();
    37.     curl_setopt($ch,CURLOPT_HEADER,0);
    38.     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    39.     curl_setopt($ch, CURLOPT_ENCODING, "");
    40.     curl_setopt($ch,CURLOPT_URL,$url);
    41.     curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
    42.     $data=curl_exec($ch);
    43.     curl_close($ch);
    44.     return $data;
    45. }
    46.  
    47.    
    48.    
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    зачем ?
    подключить ради просто так ?
    а в один вывод слабо наверно сделать и почитать тривиальное понимание абсолют и относительные пути браузера.
    да ты любишь "ой впи3дy", добавив перед всем этим собачку @, а не решать проблему по мере ее появления. В жизни так же "ой впи3дy" ?
    Если не в курсе - добавив к протоколу окончание S, ты решишь пол бед в будущем.
     
  12. Conus

    Conus Активный пользователь

    С нами с:
    21 окт 2015
    Сообщения:
    92
    Симпатии:
    0
    пробрало чучмека, видать филолог
    работает и работает...че те надо, по делу пиши чукча
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Когда угомонишься и апнешь IQ, добро пожаловать. Много на тебя текста хотел накатать... не достоин увы.
     
  14. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    я бы на месте профессионалов, дающих советы по грабу, спрашивал со своего ли ресурса ТС производит парсинг, а то наверное советникам приятно, чтобы граб производился с их сайтов по их же советам )))