2012-06-26 3 views
2

в основном, я пытаюсь очистить веб-страницы с помощью php, но я хочу сделать это после того, как начальный javascript на странице выполняется - мне нужен доступ к DOM после первоначальных запросов ajax и т. Д. ... есть ли способ сделать это?php file_get_contents - ПОСЛЕ javascript выполняет

+0

Что вы пробовали? Ваш вопрос немного неоднозначен. Если вы можете опубликовать некоторый пробный код, мы получим более четкое изображение. –

+0

Я не понимаю .... – Blaster

+4

Я думаю, что OP хочет захватить содержимое веб-страницы, и если он содержит JS, он должен быть выполнен, как если бы страница была открыта в браузере. – madfriend

ответ

2

Короткий ответ: нет.

Скремблирование сайта дает вам все, что сервер отвечает на HTTP-запрос, который вы создаете (из которого выводится «начальное» состояние дерева DOM, если это содержимое является HTML). Он не может принимать во внимание «текущее» состояние DOM после того, как он был изменен Javascript.

+1

Чтобы расширить это, JavaScript является языком на стороне клиента. Он выполняется после того, как страница была получена браузером. PHP не является браузером. На самом деле PHP тоже не заботится о DOM. Он получает данные, которые могут быть или не быть в форме XML, и вы можете делать с ним то, что хотите. – teh1

+0

любые хаки вокруг этого? загружать страницу в iframe и затем каким-то образом захватить код? и простые библиотеки, которые могли (попытаться) выполнить его где-то вдоль линии? Я знаю, что это, вероятно, все «нет», но я просто пытаюсь найти способ получить последние данные для страниц, загружаемых динамически (например, новостные сайты). –

+0

@JustinKrause: вам нужно будет встроить [Javascript engine] (http://en.wikipedia.org/wiki/JavaScript_engine#JavaScript_engines) в программу по вашему выбору, которая (я верю, но не уверен) сразу исключает PHP как язык программирования.В любом случае это будет на порядок больше, чем 'file_get_contents'. Кроме того, вы уверены, что ваш прецедент будет законным? – Jon

0

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

  • PhantomJS является обезглавленным версия WebKit, и есть некоторые полезные обертки, такие как CasperJS.

  • Zombie.js который является оберткой над jsdom написан на Javascript (Node.js).

Вам необходимо написать код JavaScript для взаимодействия с обоими этими проектами. Мне до сих пор нравится Zombie.js, так как его легче настроить, и вы можете использовать любые модули Node.js/npm в своем коде.


Старый ответ:

Нет, нет никакого способа, чтобы сделать это. Вам нужно будет эмулировать полную среду браузера внутри PHP. Я не знаю никого, кто делает такие скребки, кроме Google, и это далеко не полный.

Вместо этого вы должны использовать Firebug или другой инструмент веб-отладки, чтобы найти запрос (или последовательность запросов), который генерирует нужные вам данные. Затем используйте PHP для выполнения только необходимых запросов.

+0

@JonathanM взгляните на мой комментарий выше – madfriend

Смежные вопросы