Попытка очистить все содержимое div - PullRequest
2 голосов
/ 15 сентября 2010

У меня есть этот проект, над которым я работаю, и я хотел бы добавить действительно небольшой список близлежащих мест с помощью мест facebooks в iframe, показанном на touch.facebook.com. Я легко могу использовать touch.facebook.com/#/ place_friends.php, но затем загружает заголовки и другие панели навигации для сообщений, сообщений и т. д., а я просто хочу контент.

Я довольно уверен, посмотрев на источник touch.facebook.com/#/places_friends.php, все, что мне нужно загрузить, это div "content". В любом случае, я чрезвычайно новичок в php, и я уверен, что я думаю, что я пытаюсь сделать, это называется веб-скребком.

Ради того, чтобы разобраться в потоке стека и не беспокоиться о проверке подлинности или о чем-то еще, я хочу загрузить страницу входа, чтобы посмотреть, смогу ли я хотя бы заставить работать скребок. Как только у меня будет рабочий код, я уверен, что смогу справиться с остальным. Он загружает все внутри div. Я видел это сделано раньше, поэтому я знаю, что это возможно. и это будет выглядеть точно так же, как вы видите, когда пытаетесь войти на touch.facebook.com, но без синего логотипа наверху и вот что я пытаюсь сделать прямо здесь.

Итак, вот страница входа в систему, я пытаюсь загрузить div, который содержит текстовые поля для входа в систему самой кнопки входа. Если все сделано правильно, мы должны просто увидеть те, у которых над заголовком Facebook нет размытия.

Я пробовал

<?php
$page = file_get_contents('http://touch.facebook.com/login.php');
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
      if ($div->getAttribute('id') === 'login_form') {
         echo $div->nodeValue;
    }
}
?>

все, что нужно, это загрузить пустую страницу.

Я также пытался использовать http://simplehtmldom.sourceforge.net/

и я изменил пример основного селектора на

<?php
include('../simple_html_dom.php');

$html = file_get_html('http://touch.facebook.com/login.php');

foreach($html->find('div#login_form') as $e)
    echo $e->nodeValue;

?>

Я тоже пробовал

<?php
$stream = "http://touch.facebook.com/login.php";
$cnt = simplexml_load_file($stream);

$result = $cnt->xpath("/html/body/div[@id=login_form]");

for($i = 0; $i < $i < count($result); $i++){
    echo $result[$i];
}
?>

это тоже не сработало

Ответы [ 4 ]

1 голос
/ 20 июля 2012
$stream = "http://touch.facebook.com";
$cnt = simplexml_load_file($stream);

$result = $nct->xpath("/html/body/div[@id=content]");

for ($i = 0; $i < count($result); $i++){
    echo $result[$i];
}

в этой строке была синтаксическая ошибка, я удалил ее, теперь просто скопируйте и вставьте и запустите этот код

0 голосов
/ 15 сентября 2010

Я предполагаю, что вы не можете использовать API Facebook, если можете, тогда я настоятельно рекомендую вам использовать его, потому что вы избавите себя от всей сделки по утилизации.

Чтобы отказаться от текста лучших технологийиспользует xpath, если html, возвращенный touch.facebook.com, является переходным xhtml, что следует, то вам следует использовать xpath, пример должен выглядеть следующим образом:

$stream = "http://touch.facebook.com";
$cnt = simplexml_load_file($stream);

$result = $nct->xpath("/html/body/div[@id=content]");

for ($i = 0; $i < $i < count($result); $i++){
    echo $result[$i];
}
0 голосов
/ 24 октября 2010

Вам необходимо узнать о ваших операторах сравнения

=== для сравнения строго, вы должны использовать ==

if ($div->getAttribute('id') == 'login_form')
{

}
0 голосов
/ 15 сентября 2010

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

http://developers.facebook.com/docs/api

http://github.com/facebook/php-sdk/

...