Вопрос

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

Это было полезно?

Решение

Если вы используете Python, внимательно посмотрите Beautiful Soup (http://crummy.com/software/BeautifulSoup).

Чрезвычайно мощная библиотека, позволяющая легко очищать файлы.

Другие советы

Пакет HTML Agility Pack для .net-программистов просто потрясающий.Он превращает веб-страницы в документы XML, которые можно запрашивать с помощью XPath.

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

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

Я думаю, что общий ответ здесь — использовать любой язык + библиотеку http + парсер html/xpath.Я считаю, что использование Ruby + 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/

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

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

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

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

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

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

Чего мне не хватало, так это «обратных шаблонов» (это есть в роботизированной среде селена).В Perl это было в модуле CPAN Template::Extract, очень удобно.

Парсинг html или создание DOM я бы оставил браузеру, да, это будет не так быстро, но будет работать постоянно.

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

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

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

Я лично нахожу http://github.com/shuber/curl/tree/master и http://simplehtmldom.sourceforge.net/ отлично подходит для использования в моих проектах по поиску и очистке PHP.

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

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

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

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

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

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

Возможно, Curl с awk — это все, что вам нужно.

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

Я бы порекомендовал КрасиваяСуп.Он не самый быстрый, но работает очень хорошо в отношении неправильной формы (X)HTML-страниц, от которой подавляется большинство парсеров.

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

используйте ЛЮБОЙ ЯЗЫК.

если у вас есть хорошая библиотека парсера и библиотека http, все готово.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top