Я хотел бы получать данные с разных веб-страниц, такие как адреса ресторанов или даты различных событий для данного места и так далее. Какую лучшую библиотеку я могу использовать для извлечения этих данных с заданного набора сайтов?
лучшая библиотека для веб-скрейпинга
Ответы (13)
Если вы используете 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/.
Мне лично нравится модуль Perl WWW :: Mechanize для такого рода задач. Он дает вам объект, который смоделирован по образцу типичного веб-браузера (т.е. вы можете переходить по ссылкам, заполнять формы или использовать «кнопку возврата», вызывая на нем методы).
Для извлечения фактического содержимого вы можете затем подключить его к HTML :: TreeBuilder, чтобы преобразовать веб-сайт, который вы сейчас посещаете, в дерево HTML :: Element и извлеките нужные данные (особенно полезен метод look_down()
для HTML::Element
).
Я думаю, что ватир или селен - лучший выбор. Большинство других упомянутых библиотек на самом деле являются парсерами 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 для всего остального, я бы сказал. «Human Emulator» (или веб-эмулятор в России) действительно создан для такого рода очистки, но опять же, это российский продукт от компании, которая не скрывает своих намерений.
Я также думаю, что на одной из этих недель Уайли выпустит новую книгу по соскабливанию, которая должна быть интересной. Удачи...
Я лично нахожу http://github.com/shuber/curl/tree/master и http://simplehtmldom.sourceforge.net/ отлично подходит для использования в моих проектах по сканированию / очистке файлов PHP.
Библиотека Perl WWW :: Mechanize отлично подходит для выполнения ослиной работы по взаимодействию с веб-сайтом, чтобы перейти на нужную вам страницу.
Я бы использовал 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 может быть всем, что вам нужно.
Вы можете использовать tidy, чтобы преобразовать его в XHTML, а затем использовать любые средства обработки XML, доступные на вашем языке. .
Я бы порекомендовал BeautifulSoup. Это не самый быстрый, но очень хорошо работает в отношении нехорошего формата (X) HTML-страниц, которым подавляется большинство парсеров.
что кто-то сказал.
используйте ЛЮБОЙ ЯЗЫК.
пока у вас есть хорошая библиотека парсера и библиотека http, все готово.
дерево работает медленнее, чем просто с помощью хорошей библиотеки синтаксического анализа.