Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Очень удобная библиотека, облегчающая бриз.

Ответ 2

Пакет гибкости 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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

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

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

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