Какой самый простой способ программно извлечь структурированные данные из множества веб-страниц? - PullRequest
7 голосов
/ 18 декабря 2009

Какой самый простой способ программно извлечь структурированные данные из множества веб-страниц?

В настоящее время я использую программу Adobe AIR, которую я написал, чтобы переходить по ссылкам на одной странице и извлекать часть данных с последующих страниц. Это на самом деле работает нормально, и для программистов, я думаю, это (или другие языки) обеспечивает разумный подход, который должен быть написан на индивидуальной основе. Может быть, есть определенный язык или библиотека, которые позволяют программисту делать это очень быстро, и если это так, мне было бы интересно узнать, что они собой представляют.

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

Ответы [ 6 ]

11 голосов
/ 18 декабря 2009

Если вы выполните поиск в Stackoverflow для WWW::Mechanize & pQuery, вы увидите много примеров использования этих модулей Perl CPAN .

Однако, поскольку вы упомянули «не программист», возможно, Web::Scraper CPAN модуль может быть более подходящим? Это больше похоже на DSL и поэтому, возможно, «непрограммисту» будет проще.

Вот пример из документации для получения твитов из Twitter:

use URI;
use Web::Scraper;

my $tweets = scraper {
    process "li.status", "tweets[]" => scraper {
        process ".entry-content",    body => 'TEXT';
        process ".entry-date",       when => 'TEXT';
        process 'a[rel="bookmark"]', link => '@href';
    };
};

my $res = $tweets->scrape( URI->new("http://twitter.com/miyagawa") );

for my $tweet (@{$res->{tweets}}) {
    print "$tweet->{body} $tweet->{when} (link: $tweet->{link})\n";
}
2 голосов
/ 19 декабря 2009

Существует Sprog , который позволяет графически строить процессы из частей (Получить URL -> Таблица HTML процесса -> Записать файл), и вы можете поместить код Perl на любой стадии процесса, или написать свои собственные части для использования не программистом. Это выглядит немного заброшенным, но все еще работает хорошо.

2 голосов
/ 18 декабря 2009

Я нашел YQL очень мощным и полезным для такого рода вещей. Вы можете выбрать любую веб-страницу из Интернета, и она сделает ее действительной, а затем позволит вам использовать XPATH для запроса ее разделов. Вы можете вывести его в виде XML или JSON, готового для загрузки в другой скрипт / приложение.

Я написал свой первый эксперимент здесь:

http://www.kelvinluck.com/2009/02/data-scraping-with-yql-and-jquery/

С тех пор YQL стал более мощным благодаря добавлению ключевого слова EXECUTE, которое позволяет вам написать свою собственную логику в javascript и запускать ее на серверах Yahoo!

Более подробное описание YQL здесь здесь .

Вы можете создать таблицу данных для YQL, чтобы получить основную информацию, которую вы пытаетесь получить, и тогда человек, отвечающий за сбор данных, мог бы написать очень простые запросы (в DSL, довольно английском) к этой таблице. Им было бы легче, чем "правильное программирование", по крайней мере ...

0 голосов
/ 23 декабря 2009

Являются ли коммерческие инструменты жизнеспособными ответами? Если это так, проверьте http://screen -scraper.com / , его очень легко настроить и использовать для чистки веб-сайтов. У них есть бесплатная версия, которая на самом деле довольно полная. И нет, я не связан с компанией :)

0 голосов
/ 19 декабря 2009

Если вы не возражаете против захвата вашего компьютера и вам нужна поддержка javasript, WatiN - чертовски хороший инструмент для просмотра. Написанный на C #, в прошлом он был очень надежным для меня, предоставляя хорошую независимую от браузера оболочку для просмотра и получения текста со страниц.

0 голосов
/ 18 декабря 2009

Я использую комбинацию Ruby с hpricot и watir делает работу очень эффективно

...