Извлечение информации с сайтов на основе AJAX с использованием Python - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь получить результаты запросов на сайтах, основанных на ajax, таких как www.snapbird.org, используя Python.Поскольку он не отображается в исходном коде страницы, я не уверен, что делать дальше.Я новичок в Python и, следовательно, было бы здорово, если бы я мог получить указатель в правильном направлении.Я также открыт для некоторого другого подхода к задаче, если это проще

Ответы [ 4 ]

0 голосов
/ 11 ноября 2011

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

Но для очень отдельной работы вам может даже не понадобиться такая библиотека, вы можете использовать библиотеки urllib и urllib2 python для установления соединения и чтения ответа ... Вы можете использовать Firebug чтобы увидеть структуру данных тела поиска и ответа. Затем используйте urllib, чтобы сделать запрос с соответствующими параметрами ...

С примером ...

Я выполнил поиск с помощью joyvalencia и проверил URL запроса с помощью firebug, чтобы увидеть:

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=joyvalencia&count=100&page=2&include_rts=true&callback=twitterlib1321017083330

Таким образом, вызов этого URL с помощью urllib2.urlopen() будет таким же, как и при выполнении запроса на Snapbird. Тело ответа:

twitterlib1321017083330([{"id_str":"131548107799396357","place":null,"geo":null,"in_reply_to_user_id_str":null,"coordinates":.......

Когда вы используете urlopen() и читаете ответ, вы получаете верхнюю строку ... Тогда вы можете использовать json библиотеку python для чтения данных и анализа их в структуре данных pythonic ...

0 голосов
/ 10 ноября 2011

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

Вот базовое руководство по для драйвера Python Selenium .Обязательно следуйте инструкциям для Selenium версии 2 вместо версии 1 (если по какой-то причине вы не используете версию 1).

0 голосов
/ 11 ноября 2011

Вы также можете настроить chrome / firefox на HTTP-прокси, а затем зарегистрировать / извлечь необходимый контент с помощью прокси.Я использовал прокси-серверы Python для сохранения / регистрации запросов / контента на основе глобусов типа контента или URI.

Для других проектов я написал букмарклеты javascript для конкретного сайта, которые опрашивают новые данные, а затем POSTна моем сервере (путем динамического создания формы и iframe и установки myform.target=myiframe;

Другие сценарии / закладки javascript имитируют взаимодействие пользователя с сайтами, поэтому вместо опроса каждые несколько секунд javascript автоматизирует нажатие кнопок иотправка форм и т. д. Эти сценарии всегда очень специфичны для конкретного сайта, но они были чрезвычайно полезны для меня, особенно при переборе всех разбитых на страницы результатов для данного поиска.

Вот урезанная версияпройтись по списку «разбитых на страницы» результатов и подготовиться к отправке данных на мой сервер (который затем анализирует их с BeautifulSoup). В частности, это было разработано для отправленных / входящих сообщений Youtube.

var tables = [];
function process_and_repeat(){
    if(!(inbox && inbox.message_pane_ && inbox.message_pane_.innerHTML)){
        alert("We've got no data!");
    }
    if(inbox.message_pane_.innerHTML.indexOf('<table') === 0)
    {
        tables.push(inbox.message_pane_.innerHTML);
        inbox.next_page();
        setTimeout("process_and_repeat()",3000);
    }
    else{
        alert("Fininshed, [" + tables.length + " processed]");
        document.write('<form action=http://curl.sente.cc method=POST><textarea name=sent.html>'+escape(tables.join('\n'))+'</textarea><input type=submit></form>')
    }
}

process_and_repeat();  // now we wait and watch as all the paginated pages are viewed :)

Это урезанный пример без какой-либо фантазииiframes / неосновные вещи, которые только увеличивают сложность.

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

0 голосов
/ 10 ноября 2011

Это будет сложно, но для начала, ppen firebug и найдите URL, который вызывается при обработке запроса AJAX. Вы можете вызвать это прямо в вашей программе Python и проанализировать вывод.

...