2008-09-15 3 views
11

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

+0

Отметьте [этот вопрос] (http://stackoverflow.com/questions/2861/options-for-html-scraping) для всех ваших ответов. – 2008-09-15 21:21:56

ответ

0

На каком языке вы хотите использовать?

завиток с awk может быть все, что вам нужно.

0

Вы можете использовать tidy, чтобы преобразовать его в XHTML, а затем использовать любые средства обработки XML, доступные на вашем языке.

1

Библиотека Perl WWW::Mechanize отлично подходит для работы с ослами, взаимодействуя с веб-сайтом, чтобы добраться до нужной вам страницы.

0

Я бы порекомендовал BeautifulSoup. Это не самый быстрый, но очень хорошо работает в отношении не-корректности HTML-страниц, которые большинство парсеров задыхаются.

1

Я бы использовал LWP (Libwww для Perl). Вот хороший маленький гид: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW :: Скребок имеет документы здесь: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.html Это может быть полезным в качестве основы, вы, вероятно, хотите, чтобы создать свой собственный модуль, который соответствует вашим потребностям горнодобывающего ресторана.

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

4

Я думаю, что общий ответ здесь - использовать любой язык + http library + html/xpath parser. Я считаю, что использование рубин + Hpricot дает хорошее чистое решение:

require 'rubygems' 
require 'hpricot' 
require 'open-uri' 

sites = %w(http://www.google.com http://www.stackoverflow.com) 

sites.each do |site| 
    doc = Hpricot(open(site)) 

    # iterate over each div in the document (or use xpath to grab whatever you want) 
    (doc/"div").each do |div| 
    # do something with divs here 
    end 
end 

Более подробную информацию о Hpricot см http://code.whytheluckystiff.net/hpricot/

10

В HTML Ловкость обновления для .NET программистов является удивительным. Он превращает веб-страницы в документы XML, которые могут быть запрошены с помощью XPath.

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//[email protected]") 
{ 
HtmlAttribute att = link"href"; 
att.Value = FixLink(att); 
} 
doc.Save("file.htm"); 

Вы можете найти его здесь. http://www.codeplex.com/htmlagilitypack

3

Мне лично нравится WWW::Mechanize Модуль Perl для этих задач. Это дает вам объект, который моделируется после обычного веб-браузера (т. Е. Вы можете следить за ссылками, заполнять формы или использовать кнопку «назад», вызывая методы на нем).

Для извлечения фактического содержания, вы можете затем подключить его к HTML::TreeBuilder превратить сайт в настоящее время вы приезжаете в дерево HTML::Element объектов, и извлечь данные, которые вы хотите (look_down() метода HTML::Element особенно полезно).

1

Было несколько ответов, рекомендующих Perl Mechanize, но я думаю, что Ruby Mechanize (очень похоже на версию Perl) еще лучше. Он синтаксически обрабатывает некоторые вещи, подобные формам. Кроме того, есть несколько интерфейсов, которые управляют сверху Ruby Mechanize, которые делают вещи еще проще.

0

что-то сказал.

использовать ЛЮБЫЕ ЯЗЫКИ.

до тех пор, пока у вас есть хорошая библиотека анализатора и http-библиотека, вы настроены.

Дерево перемещается медленнее, а затем используется хорошая библиотека синтаксического анализа.

3

Я думаю, что watir или selenium - лучший выбор. Большинство других упомянутых библиотек на самом деле являются анализаторами HTML, и это не то, что вы хотите ... Вы очищаете, если владелец веб-сайта хотел, чтобы вы добрались до его данных, он поставил свалку своей базы данных или сайта на торрент и избегать всех HTTP-запросов и дорогого трафика.

В принципе, вам нужно разобрать HTML, но более важно автоматизировать браузер. Это касается возможности перемещения мыши и нажатия, в основном, действительно имитирующего пользователя. Вам нужно использовать программу screencapture, чтобы добраться до captchas и отправить их на decaptcha.com (которые решают их на долю процента), чтобы обойти это. забыть о сохранении этого файла captcha путем разбора html без рендеринга его в браузере, «как это должно быть видно». Вы - скрипинг, а не httprequestscraping.

watir сделал трюк для меня в сочетании с autoitx (для перемещения мыши и ввода ключей в полях -> иногда это необходимо для набора правильных событий javascript) и простой утилиты для захвата экрана для captcha. таким образом, вы будете наиболее успешными, совершенно бесполезно писать отличный синтаксический анализатор html, чтобы узнать, что владелец сайта превратил часть текста в графику. (Проблемно? Нет, просто получите библиотеку OCR и подайте jpeg, текст будет возвращен). Кроме того, я редко видел, что они заходят так далеко, хотя на китайских сайтах в графике много текста.

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

То, что я пропустил, было «обратные шаблоны» (у робота рамки селена есть это). Perl имел это в модуле CPAN Template :: Extract, очень удобно.

Разбор html или создание DOM, я бы ушел в браузер, да, это будет не так быстро, но это будет работать все время.

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

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

Я также считаю, что на одной из этих недель Уайли есть новая книга на соскабливании, это должно быть интересно. Удачи ...

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