Php Parse больше не работает - PullRequest
       14

Php Parse больше не работает

2 голосов
/ 11 февраля 2011

Я пытался разобрать текст с этой страницы, мои методы были curl и dom, но он просто возвращает пустую страницу. Если бы кто-нибудь мог показать мне, как это сделать, это было бы очень признательно. Я застрял и не знаю, куда идти отсюда.

1 Ответ

2 голосов
/ 11 февраля 2011

Код DOM работает как положено.<span> не имеет текстового узла:

<span 
    id="ctl00_ctl00_contentPlaceHolder_…_msgTextBody" 
    class="msgBody" 
    style="color:#525B64;"></span>

DOMNodeList, возвращенный вашим XPath, будет пустым.Если вы удалите тест /text(), он будет содержать DOMElement для <span>, который будет возвращать пустую строку для nodeValue.

Текст, который вы пытаетесь проанализировать, вставляется с помощью JavaScript на стороне клиента после страница была передана вашему браузеру.Этого не происходит при извлечении страницы с DOM, поскольку DOM не является интерпретатором JavaScript.

Сообщения, которые вы ищете, находятся в блоке <script>.Вы можете проанализировать этот блок и попытаться извлечь его с помощью регулярного выражения, например,

$xp = new DOMXpath($dom);
$nodes = $xp->query('//script[contains(., "var messages")]');
preg_match_all(
    '~var messages = (.*\]);~',
    $nodes->item(0)->nodeValue,
    $messages);
$messages = json_decode($messages[1][0]);
var_dump($messages);

Выше было бы проанализировать и декодировать JavaScript в массив объектов PHP, к которому вы затем можете получить доступ с помощью $message->MessageText.

См. http://codepad.viper -7.com / R985hm

...