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





Какой язык ты хочешь использовать?
curl с awk может быть всем, что вам нужно.
Вы можете использовать аккуратный, чтобы преобразовать его в XHTML, а затем использовать любые средства обработки XML, доступные на вашем языке.
Библиотека Perl WWW :: Mechanize отлично подходит для выполнения ослиной работы по взаимодействию с веб-сайтом, чтобы добраться до нужной страницы.
Я бы рекомендовал BeautifulSoup. Это не самый быстрый, но очень хорошо работает в отношении нехорошего формата (X) HTML-страниц, которым подавляется большинство парсеров.
Я бы использовал 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 предоставит вам базовый поисковый робот, на котором вы сможете опираться.
Я думаю, что общий ответ здесь - использовать любой язык + 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/.
Пакет 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
Мне лично нравится модуль WWW :: Mechanize Perl для такого рода задач. Он дает вам объект, который смоделирован по образцу типичного веб-браузера (т.е. вы можете переходить по ссылкам, заполнять формы или использовать «кнопку возврата», вызывая на нем методы).
Для извлечения фактического контента вы можете затем подключить его к HTML :: TreeBuilder, чтобы преобразовать веб-сайт, который вы в настоящее время посещаете, в дерево объектов HTML :: Элемент и извлечь нужные данные (особенно полезен метод look_down() из HTML::Element).
Если вы используете Python, обратите внимание на Beautiful Soup (http://crummy.com/software/BeautifulSoup).
Чрезвычайно функциональная библиотека, упрощающая очистку.
Было несколько ответов, рекомендующих Perl Mechanize, но я думаю, что Ruby Mechanize (очень похожий на версию Perl) даже лучше. Он обрабатывает некоторые вещи, такие как формы, гораздо более синтаксически. Кроме того, есть несколько интерфейсов, которые запускают наверху Ruby Mechanize, что упрощает работу.
Я лично считаю, что http://github.com/shuber/curl/tree/master и http://simplehtmldom.sourceforge.net/ отлично подходят для использования в моих проектах по сканированию / очистке PHP.
многие веб-сайты не поддерживают завиток. Это дает ошибку, в которой отказано в разрешении.
что кто-то сказал.
используйте ЛЮБОЙ ЯЗЫК.
пока у вас есть хорошая библиотека парсера и библиотека http, все готово.
дерево работает медленнее, чем просто с помощью хорошей библиотеки синтаксического анализа.
я думаю, что ватир или селен - лучший выбор. Большинство других упомянутых библиотек на самом деле являются парсерами HTML, и это не то, что вам нужно ... Вы парсите, если владелец веб-сайта хотел, чтобы вы получили его данные, он поместил бы дамп своей базы данных или сайта на торрент и избегайте всех HTTP-запросов и дорогостоящего трафика.
в основном вам нужно анализировать HTML, но, что более важно, автоматизировать браузер. Это до такой степени, что можно перемещать мышь и щелкать, фактически имитируя пользователя. Вам нужно использовать программу захвата экрана, чтобы найти капчи и отправить их на decaptcha.com (которые решают их за доли цента), чтобы обойти это. Забудьте о сохранении этого файла captcha, анализируя html, не отображая его в браузере «так, как он должен быть виден». Вы сканируете экран, а не httprequestscraping.
watir помог мне в сочетании с autoitx (для перемещения мыши и ввода клавиш в поля -> иногда это необходимо для установки правильных событий javascript) и простой утилитой захвата экрана для captcha. таким образом вы добьетесь наибольшего успеха, совершенно бесполезно писать отличный html-парсер, чтобы узнать, что владелец сайта превратил часть текста в графику. (Проблема? Нет, просто получите библиотеку OCR и загрузите jpeg, текст будет возвращен). К тому же я редко видел, чтобы они заходили так далеко, хотя на китайских сайтах много текста в графике.
Xpath все время спасал мне жизнь, это отличный предметно-ориентированный язык (ИМХО, я могу ошибаться), и вы можете получить доступ к любому тегу на странице, хотя иногда вам нужно его настроить.
Что мне не хватало, так это «обратные шаблоны» (они есть в структуре роботов на основе селена). Perl имел это в модуле CPAN Template :: Extract, очень удобно.
Разбор html или создание DOM я бы оставил браузеру, да, это будет не так быстро, но будет работать все время.
Кроме того, библиотеки, которые претендуют на роль юзерагентов, бесполезны, сайты в настоящее время защищены от парсинга, и рендеринг сайта на реальном экране часто необходим, чтобы выйти за рамки капчи, а также событий javascript, которые необходимо запускать для отображения информации и т. д.
Watir, если вам нравится Ruby, и Selenium для всего остального, я бы сказал. «Эмулятор человека» (или веб-эмулятор в России) действительно создан для такого рода очистки, но опять же, это российский продукт от компании, которая не скрывает своих намерений.
Я также думаю, что на одной из этих недель Уайли выпустит новую книгу по соскабливанию, которая должна быть интересной. Удачи...
Проверьте этот вопрос для всех ваших ответов.