Лучший способ получить контент сайта внешне - PullRequest
0 голосов
/ 24 июня 2009

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

Мне нужно получить эти результаты поиска программно (скажем, из программы Java или скрипта perl / python).

Так что в идеале я могу запустить свою программу с 100 запросами в качестве пользовательских вводов, а затем программа будет отображать этот веб-сайт при каждом запросе и выкладывать на экран все результаты поиска, возвращаемые веб-сайтом.

Очевидная проблема заключается в том, что сайт находится в javasript вместо простого HTML, поэтому отправка запроса URL-адреса и анализ полученного результата не будут работать (поскольку исходный код этой страницы всегда представляет собой просто набор ссылок на различные файлы .js).

Учитывая вышеперечисленные условия, каковы мои варианты?

Ответы [ 3 ]

2 голосов
/ 24 июня 2009

Если поставщик услуг поиска не предоставит вам API для работы (либо через соглашение обратного канала, либо через общедоступное соглашение), то ничто из того, что вы сделаете, не будет работать очень долго.

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

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

Чтобы ты не думал, что я тебя осуждаю, я дам тебе знать, что я говорю из опыта;)

0 голосов
/ 24 июня 2009

Javascript выполняет http-запросы почти так же, как это делает браузер. Когда вы выясните, что они из себя представляют, вы можете попытаться воссоздать их в perl / python / etc. С Firefox + Firebug вы можете видеть запросы на панели «Net».

Вещи, которые вам, возможно, придется принять во внимание, это строка user-agent, куки, тот факт, что иногда возвращаемые данные предназначены для запуска / интерпретации Javascript и т. Д. Возможно, у вашего языка есть хороший класс httpbrowser, который вы можете использовать


Просто посмотрел, искал IBM, взял данные поста из Firebug, заменил символы новой строки на '&' и поставил их после URL запроса:

[http://bcode.bloomberg.com/sym/dwr/call/plaincall/searchMgr.search.dwr?callCount=1&windowName=&c0-scriptName=searchMgr&c0-methodName=search&c0-id=0&c0-e1=string:ibm&c0-e2=string:&c0-e3=number:100&c0-e4=number:0&c0-e5=boolean:false&c0-param0=Object_SearchCriteria:{search:reference:c0-e1,%20filter:reference:c0-e2,%20limit:reference:c0-e3&,%20start:reference:c0-e4,%20allSources:reference:c0-e5}&batchId=4&page=%2Fsym%2F&httpSessionId=&scriptSessionId=FBC68693A4E1BC08D6E0DDFBDF6D0860]

но возвращается

throw 'allowScriptTagRemoting is false.';
//#DWR-REPLY
if (window.dwr) dwr.engine.remote.handleBatchException({ name:'java.lang.SecurityException', message:'GET Disallowed' });
else if (window.parent.dwr) window.parent.dwr.engine.remote.handleBatchException({ name:'java.lang.SecurityException', message:'GET Disallowed' });

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

0 голосов
/ 24 июня 2009

Установите Firebug, изучите запросы, сделанные javascript сайта, и имитируйте их в своей программе. Скорее всего, есть один запрос, который нужно сделать, и результаты придут в какой-то хорошей форме, такой как JSON

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