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

Вопрос задан: 11 лет назад Последняя активность: 8 лет назад
up 11 down

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

13 ответов

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 10 down

HTML Agility Pack для программистов .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

up 10 down accepted

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

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

up 4 down

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

up 3 down

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

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

up 3 down

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

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

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

up 2 down

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

up 1 down

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

up 1 down

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

up 1 down

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

up 0 down

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

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

up 0 down

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

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

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

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

up 0 down

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

up 0 down

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