2009-06-24 3 views
0

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

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

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

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

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

+0

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

+0

Этот сайт не имеет API. И предположим, что нет никаких ограничений на то, сколько поисков я могу сделать и как часто. – Saobi

+0

Можете ли вы рассказать о том, какой сайт вы хотите использовать для поиска? Если поиск - это локальный поиск, вы можете попросить публичного поставщика поиска API-поиска искать только на этом сайте. – akarnokd

ответ

0

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

Возможно, вам придется принять во внимание, что пользовательские строки, куки-файлы, то, что иногда возвращаемые данные предназначены для запуска/интерпретации 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

Хорошо, я использовал панель мониторинга панели Firebug. И всякий раз, когда я отправляю запрос на этот веб-сайт, запрос является POST, но у него есть search.dwr, а не фактический запрос, который я отправил. – Saobi

+0

Поиск осуществляется с помощью Javascript, поэтому он может собрать и использовать любой URL-адрес, который он хочет, очевидно. Вам нужно будет изучить источник, чтобы узнать, как он это делает, или просто посмотреть, что он пишет, и попытаться имитировать это в вашем коде. Является ли сайт поиска общедоступным? – MSpreij

+0

Но этот запрос POST, который я видел в Firebug, как я могу копать глубже, чтобы увидеть эквивалентный HTTP-запрос (желательно с добавлением поискового запроса)? Да, это общедоступный сайт. – Saobi

0

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

2

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

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

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

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

+0

Как насчет Dyanmic Data Exchange? Не можете ли вы использовать это, чтобы захватить любой контент из любого окна в окнах? Так что я могу просто взять контент из своего браузера и проанализировать его в своей программе? – Saobi

+0

@Saobi, вы понимаете, что DDE очень, очень старый и не используется в современных веб-браузерах? –

+0

Какие проблемы я столкнулся с DDE? – Saobi

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