Как программно захватить веб-страницу с принудительным обновлением - PullRequest
2 голосов
/ 27 декабря 2008

Мне нужно захватить веб-сайт, и я ищу подходящую библиотеку или программу для этого. Веб-сайт использует Java Script и отправляет обновления на страницу, и мне нужно захватить их, а также саму страницу. Я использую curl для захвата самой страницы, но я не знаю, как захватить обновления. Если бы у меня был выбор, я бы использовал C ++.

Привет

Ответы [ 5 ]

2 голосов
/ 27 декабря 2008

Установите Firefox и GreaseMonkey . Попросите сценарий GM добавить события DOM, если это необходимо, для отслеживания изменений. Затем вы можете использовать XMLHttpRequest для отправки информации на сервер или записать ее в локальные файлы с помощью XPCOM file IO opearation .

С этим вы можете делать то, что вы хотите, в дюжине строк и почти без реверс-инжиниринга, тогда как другие советуют (скриншот экрана) потребуют тысячи строк кода для тяжелого сайта JavaScript IMO.

Дополнения: это / не / работа для C ++. И в любом случае, если вы сделаете это на C ++, у вас возникнет необходимость в реинжиниринге JS, так что вы можете просто изучить достаточно JS, чтобы использовать GreaseMonkey.

2 голосов
/ 27 декабря 2008

Если вы все еще хотите использовать c ++ и curl, попытайтесь выяснить, что делает javascript на странице - я предполагаю, что он просто использует таймер для отправки запроса AJAX и обновляет страницу (хотя это может быть более сложно). Используйте такой инструмент, как firefox с firebug («шпионаж в сети» - то, что вам нужно), чтобы увидеть, что это за запрос - вы получите:

  • URL запроса
  • параметры
  • возвращаемое содержимое (это может быть html, text, xml или json)

Если вам повезет, у вас будет достаточно, чтобы имитировать поведение в c ++ с помощью curl. Если вы ничего не можете сделать из собранных данных, вам придется просмотреть javascript и попытаться выяснить, что он делает (но в большинстве случаев обновления страницы действительно просты).

Самый простой способ сделать это - сделать это в браузере, например. как плагин Firefox (написан на javascript) - если это необходимо для чего-то другого, кроме проекта для домашних животных, это может быть немного «нелегально», но это должно быть действительно легко:

  • отслеживать дерево DOM на наличие обновлений (html DOM level 2 имеет всевозможные «мутационные» события, но я никогда не использовал их, поэтому я не знаю о них много или они «работают» / поддерживаются - см. События мутации DOM ). Существует даже вероятность, что такого рода вещи будут работать в greasemonkey , что означает, что вам не придется создавать полноценный плагин для Firefox - например. Постобработка страницы после ее отрисовки должна помочь вам начать работу (вы не хотите отслеживать «загрузку», но что-то вроде «DOMSubtreeModified»). Если события мутации не работают, вы всегда можете использовать таймер и сравнить содержимое HTML.
  • или делайте так, как делает firebug и отслеживает сетевые запросы и что-то делает с результатами
1 голос
/ 27 декабря 2008

Если вы ищете статическую очистку веб-страницы BeautifulSoup (Python) - один из лучших и простых.

Если вы хотите отсканировать некоторые тикеры, отображаемые на JavaScript, или что-то подобное, это невозможно сделать до тех пор, пока страница не будет отрисована, следовательно, это невозможно только с BeautifulSoup. вам придется использовать безголовый браузер, такой как Crowbar - Similie (использует XULRunner), который отображает содержимое javascript в безголовом браузере, а вывод этого визуализированного содержимого можно использовать как вход для скребка BeautifulSoup.

1 голос
/ 27 декабря 2008

Взгляните на SpiderMonkey .

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

Кроме того, вы можете перепроектировать, как выполняются push-обновления JavaScript, и получить к ним прямой доступ. Похоже, вам нужно хранить эти обновления и / или применять их к базовой HTML-странице.

0 голосов
/ 27 декабря 2008

Проблема в том, что ваши веб-страницы обновляются, потому что на странице выполняется код скрипта. Использование curl не поможет вам за это ..

Не уверен в ваших точных потребностях ... но вы могли бы написать букмарклет инжектора javascript, который добавляет кнопку на любую веб-страницу и позволяет вам вручную получать HTML DOM или body в любое время ... Вот сколько клип приложения для разметки работают.

Если вам нужно что-то, что автоматически фиксирует обновления по мере их появления - например, фильм ... тогда вам понадобится что-то более сложное ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...