лучшая библиотека для веб-скребков - PullRequest
11 голосов
/ 16 сентября 2008

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

Ответы [ 13 ]

10 голосов
/ 16 сентября 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

10 голосов
/ 16 сентября 2008

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

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

4 голосов
/ 16 сентября 2008

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

3 голосов
/ 07 февраля 2012

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

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

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

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

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

Разбор HTML или создание DOM, я бы оставил браузеру, да, это будет не так быстро, но будет работать все время.

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

Watir, если вы в Ruby, Selenium для остальных, я бы сказал. «Human Emulator» (или Web Emulator в России) действительно создан для такого рода операций, но опять же это российский продукт компании, которая не скрывает своих намерений.

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

3 голосов
/ 16 сентября 2008

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

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

2 голосов
/ 26 февраля 2009

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

1 голос
/ 16 сентября 2008

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

1 голос
/ 16 сентября 2008

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

1 голос
/ 16 сентября 2008

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

0 голосов
/ 06 марта 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...