лучшая библиотека для веб-скрейпинга

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


person gyurisc    schedule 15.09.2008    source источник
comment
Просмотрите этот вопрос, чтобы получить все свои ответы.   -  person Dillie-O    schedule 16.09.2008


Ответы (13)


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

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

person Community    schedule 15.09.2008

Пакет 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

person Mike    schedule 15.09.2008

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

person Drew Olson    schedule 15.09.2008

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

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

person 8jean    schedule 15.09.2008

Я думаю, что ватир или селен - лучший выбор. Большинство других упомянутых библиотек на самом деле являются парсерами 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» (или веб-эмулятор в России) действительно создан для такого рода очистки, но опять же, это российский продукт от компании, которая не скрывает своих намерений.

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

person user175099    schedule 07.02.2012

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

person hamstar    schedule 26.02.2009
comment
многие веб-сайты не поддерживают завиток. Это дает ошибку, в которой отказано в разрешении. - person zengr; 25.10.2010

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

person Paul Dixon    schedule 15.09.2008

Я бы использовал 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 предоставит вам базовый поисковый робот, на котором вы сможете развить свою работу.

person Hugh Buchanan    schedule 15.09.2008

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

person Daniel Spiewak    schedule 15.09.2008

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

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

person Silas    schedule 15.09.2008

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

person Jim    schedule 15.09.2008

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

person klingon_programmer    schedule 15.09.2008

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

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

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

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

person Community    schedule 05.03.2009