Ответ 1
Если вы используете python, внимательно посмотрите на Beautiful Soup (http://crummy.com/software/BeautifulSoup).
Очень удобная библиотека, облегчающая бриз.
Я хотел бы получать данные с разных веб-страниц, таких как адреса ресторанов или даты разных событий для определенного места и так далее. Какая лучшая библиотека я могу использовать для извлечения этих данных из определенного набора сайтов?
Если вы используете python, внимательно посмотрите на Beautiful Soup (http://crummy.com/software/BeautifulSoup).
Очень удобная библиотека, облегчающая бриз.
Пакет гибкости 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
Я думаю, что общий ответ здесь - использовать любой язык + http library + html/xpath parser. Я считаю, что использование 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::Mechanize Модуль Perl для этих задач. Он дает вам объект, который моделируется после обычного веб-браузера (т.е. Вы можете следить за ссылками, заполнять формы или использовать кнопку "Назад", вызывая методы на нем).
Для извлечения фактического содержимого вы можете подключить его к HTML::TreeBuilder, чтобы преобразовать веб-сайт, который вы посещаете в данный момент в дерево HTML::Element объектов и извлечь нужные данные (особенно полезен метод look_down()
HTML::Element
).
Я думаю, что 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 я бы оставил в браузере, да, это будет не так быстро, но он будет работать все время.
Также библиотеки, которые претендуют на роль Useragents, бесполезны, сайты в настоящее время защищены от выскабливания, а рендеринг сайта на реальном экране часто требует выхода за рамки кавычек, а также событий javascript, которые необходимо запускать для получения информации для отображения и т.д.
Ватир, если ты в Руби, Селен для остальных, я бы сказал. "Эмулятор человека" (или "Веб-эмулятор в россии" ) действительно сделан для такого рода выскабливания, но опять же это русский продукт от компании, который не скрывает своих намерений.
Я также думаю, что на одной из этих недель у Wiley появилась новая книга на выскабливание, это должно быть интересно. Удачи...
Я лично нахожу http://github.com/shuber/curl/tree/master и http://simplehtmldom.sourceforge.net/ удивительный для использования в моих проектах PHP spidering/scraping.
Библиотека Perl WWW:: Mechanize отлично подходит для работы осла, взаимодействующей с веб-сайтом, чтобы попасть на нужную вам страницу.
Я бы использовал 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 предоставит вам базовый искатель, на котором вы сможете опираться.
Было несколько ответов, рекомендующих Perl Mechanize, но я думаю, что Ruby Mechanize (очень похоже на Perl-версию) еще лучше. Он синтаксически обрабатывает некоторые вещи, подобные формам. Кроме того, есть несколько интерфейсов, которые работают поверх Ruby Mechanize, которые делают вещи еще проще.
Какой язык вы хотите использовать?
завиток с awk может быть всем, что вам нужно.
Вы можете использовать tidy, чтобы преобразовать его в XHTML, а затем использовать любые средства обработки XML, доступные для вашего языка.
Я бы рекомендовал BeautifulSoup. Это не самый быстрый, но очень хорошо работает в отношении не-корректности (X) HTML-страниц, которые большинство парсеров задыхаются.
что кто-то сказал.
используйте ЛЮБОЙ ЯЗЫК.
пока у вас есть хорошая библиотека парсера и библиотека http, вы настроены.
материал дерева работает медленнее, а затем просто использует хорошую библиотеку разбора.