Как вы решаете скрытые ссылки JavaScript с помощью PHP? - PullRequest
1 голос
/ 10 марта 2009

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

Могу ли я продолжить анализ следующих веб-страниц? Если бы в URL была зашифрована переменная типа «page = 2», я бы прошел через них таким образом, но URL зашифрованы.

-LPG

Ответы [ 2 ]

1 голос
/ 11 марта 2009

В основном у вас есть два варианта:

  1. подражают своей логике
  2. эмулирует действительный клиент

Если вы хотите пойти с # 1, вам придется прочитать их код Javascript и выяснить, как он работает. Я не могу объяснить это лучше, чем это, так как это сильно зависит от их кода; Вы просто должны знать Javascript и «прогуливать» их код. Затем заставьте ваш код выполнять ту же логику, чтобы сгенерировать URL «следующей страницы».

Если их система использует AJAX, вы все равно можете эмулировать его (вопреки тому, что было сказано при нажатии на голос). Для этого вы просто используете такой инструмент, как расширение Firebug Firefox, чтобы вы могли наблюдать за тем, что ваш браузер отправляет на их сервер «за кулисами». Затем заставьте ваш код отправлять поддельный HTTP-запрос, имитирующий их AJAX-запрос. Вы могли бы сделать это даже без такого инструмента, как Firebug: просто определите, что ваш браузер отправит, посмотрев код Javascript. Однако, если вы используете что-то вроде Firebug, это значительно упростит задачу (вместо того, чтобы делать вывод, вы можете просто увидеть, что отправляется).

Если вы хотите использовать вместо # 1, вам нужно будет использовать либо реальный браузер (и управлять им программно, используя что-то вроде Selenium), либо использовать что-то вроде Rhino для запуска Javascript. Использование настоящего браузера с такой системой управления, как Selenium, вероятно, самый простой способ; однако, это будет медленно, так как оно ограничено временем, которое требуется вашему браузеру для отображения страниц и тому подобного. Решение, использующее Rhino или что-то подобное, будет быстрее, но оно также потребует гораздо больше работы (вам придется анализировать HTML, включать все соответствующие файлы JS и т. Д.), Поэтому я рекомендую это только в качестве в крайнем случае.

0 голосов
/ 10 марта 2009

Единственным способом было бы написать регулярное выражение, которое анализирует ссылки javascript и следует за ними. Это, вероятно, будет работать только в том случае, если URL-адрес страницы был в коде JavaScript, например:

<a href="javascript:open('something/some_page.html');">Something</a>

вместо

<a href="javascript:open(someField.value);">Something</a>

Поскольку во втором примере вам фактически придется обрабатывать ссылку javascript с использованием PHP, что может быть очень сложным.

Помните также, что вам придется создавать регулярные выражения для конкретного сайта, поскольку каждый сайт форматирует свои URL-адреса по-своему. Поэтому Cnn.com может форматировать свои URL иначе, чем Reddit.com

...