Получить контент DIV с внешнего веб-сайта

Я хочу получить DIV с внешнего сайта с чистым PHP.

Внешний веб-сайт: http://www.isitdownrightnow.com/youtube.com.html

Div text Я хочу от isitdownrightnow (statusup div): <div class="statusup">The website is probably down just for you...</div>

Я уже пробовал file_get_contents с DOMDocument и str_get_html, но я не мог заставить его работать.

Например, это

$page = file_get_contents('http://css-tricks.com/forums/topic/jquery-selector-div-variable/');
    $doc = new DOMDocument();
    $doc->loadHTML($page);
    $divs = $doc->getElementsByTagName('div');
    foreach($divs as $div) {
        // Loop through the DIVs looking for one withan id of "content"
        // Then echo out its contents (pardon the pun)
        if ($div->getAttribute('class') === 'bbp-template-notice') {
             echo $div->nodeValue;
        }
    }

Он просто отобразит ошибку в консоли:

Не удалось загрузить ресурс: сервер ответил статусом 500 (Внутренняя ошибка сервера)

Ответ 1

Это то, что я всегда использую:

$url = 'https://somedomain.com/somesite/';
$content = file_get_contents($url);
$first_step = explode( '<div id="thediv">' , $content );
$second_step = explode("</div>" , $first_step[1] );

echo $second_step[0];

Ответ 2

Это может быть немного перебор, но вы получите суть.

<?php 

$doc = new DOMDocument;

// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;

// Most HTML Developers are chimps and produce invalid markup...
$doc->strictErrorChecking = false;
$doc->recover = true;

$doc->loadHTMLFile('http://www.isitdownrightnow.com/check.php?domain=youtube.com');

$xpath = new DOMXPath($doc);

$query = "//div[@class='statusup']";

$entries = $xpath->query($query);
var_dump($entries->item(0)->textContent);

?>

Ответ 3

Я использовал метод xpath, предложенный @mightyuhu, и он отлично поработал с его добавлением задания. В зависимости от веб-страницы вы получаете информацию и доступность "id" или "class", который идентифицирует тег, который вы хотите получить, вам придется изменить запрос, который вы используете. Если тег имеет назначенный ему "id", вы можете использовать его (образец предназначен для извлечения курса доллара США):

$query = "//div[@id='USD']";

Тем не менее, разработчики сайта не будут делать это так легко для нас, поэтому в моем примере будет еще несколько "неназванных" тегов:

<div id="USD" class="tab">
  <table cellspacing="0" cellpadding="0">
    <tbody>
     <tr>
        <td>Ask Rate</td>
        <td align="right">1.77400</td>
     </tr>
     <tr class="even">
        <td>Bid Rate</td>
        <td align="right">1.70370</td>
     </tr>
     <tr>
        <td>BNB Fixing</td>
        <td align="right">1.735740</td>
     </tr>
   </tbody>
  </table>
</div>

Поэтому мне пришлось сменить запрос, чтобы получить "Ask Rate":

$doc->loadHTMLFile('http://www.fibank.bg/en');
$xpath = new DOMXPath($doc);
$query = "//div[@id='USD']/table/tbody/tr/td";

Итак, я использовал запрос выше, но изменил элемент на 1 вместо 0, чтобы получить второй столбец, где находится обменный курс (первый столбец содержит текст "Ask Rate" ):

$entries = $xpath->query($query);
$usdrate = $entries->item(1)->textContent;

Другим методом является ссылка на значение непосредственно в запросе, которое, когда у вас нет имен или стилей, должно быть сделано с индексированием тегов, которое было получено мной в качестве знаний из моего браузера Maxthon и его элемента "Inspect", в сочетании с опцией "Copy XPath" справа (опрятный, да?):

"//*[@id="USD"]/table/tbody/tr[1]/td[2]"

Обратите внимание, что он также добавляет звездочку (*) после //, которую я не вшил. В этом случае вы должны снова получить значение с помощью item(0), так как других значений не будет.

Если вам нужно, вы можете внести любые изменения в извлеченную строку, например, изменить формат номера в соответствии с вашими предпочтениями:

$usdrate = number_format($usdrate, 5, ',', ' ');

Я надеюсь, что кто-то найдет это полезным, поскольку я нашел ответы выше, и пощажу это время в поисках правильного запроса и синтаксиса.

Ответ 4

$contents = file_get_contents($url); 

  $title = explode('<div class="entry-content">',$contents); 
  $title = explode("</div>",$title[1]); 

$fp = fopen ("s.php", "w+"); 
fwrite ($fp, "$title[0]"); 
fclose ($fp); 
require_once('s.php');