Pregunta

Me gustaría obtener datos de diferentes páginas web, como direcciones de restaurantes o fechas de diferentes eventos para una ubicación determinada, etc.¿Cuál es la mejor biblioteca que puedo utilizar para extraer estos datos de un conjunto determinado de sitios?

¿Fue útil?

Solución

Si usa Python, eche un vistazo a Beautiful Soup (http://crummy.com/software/BeautifulSoup).

Una biblioteca extremadamente capaz hace que el scraping sea muy sencillo.

Otros consejos

El HTML Agility Pack para programadores .net es fantástico.Convierte páginas web en documentos XML que se pueden consultar con 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");

Lo puedes encontrar aquí. http://www.codeplex.com/htmlagilitypack

Creo que la respuesta general aquí es usar cualquier idioma + biblioteca http + analizador html/xpath.Creo que usar Ruby + HPricot da una solución limpia y agradable:

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

Para obtener más información sobre Hpricot, consulte http://code.whytheluckystiff.net/hpricot/

personalmente me gusta el WWW::Mecanizar Módulo Perl para este tipo de tareas.Le proporciona un objeto modelado a partir de un navegador web típico (es decir,puede seguir enlaces, completar formularios o usar el "botón Atrás" llamando a los métodos que aparecen en él).

Para la extracción del contenido real, puede conectarlo a HTML::Constructor de árboles para transformar el sitio web que estás visitando actualmente en un árbol de HTML::Elemento objetos y extraer los datos que desee (los look_down() método de HTML::Element es especialmente útil).

Creo que el agua o el selenio son las mejores opciones.La mayoría de las otras bibliotecas mencionadas son en realidad analizadores HTML, y eso no es lo que quieres...Estás raspando, si el propietario del sitio web quisiera que accedieras a sus datos, pondría un volcado de su base de datos o sitio en un torrent y evitaría todas las solicitudes http y el tráfico costoso.

Básicamente, necesitas analizar HTML, pero lo más importante es automatizar un navegador.Esto hasta el punto de poder mover el mouse y hacer clic, básicamente imitando realmente a un usuario.Necesitas usar un programa de captura de pantalla para acceder a los captchas y enviarlos a decaptcha.com (que los resuelve por una fracción de centavo) para evitarlo.olvídese de guardar ese archivo captcha analizando el html sin representarlo en un navegador "como se supone que debe verse".Estás haciendo un screenscraping, no httprequestscraping.

watir hizo el truco por mí en combinación con autoitx (para mover el mouse e ingresar claves en los campos -> a veces esto es necesario para configurar los eventos de JavaScript correctos) y una sencilla utilidad de captura de pantalla para los captcha.De esta manera tendrá más éxito, es bastante inútil escribir un gran analizador HTML para descubrir que el propietario del sitio ha convertido parte del texto en gráficos.(¿Problemático?no, simplemente obtenga una biblioteca de OCR y alimente el jpeg, se devolverá el texto).Además, rara vez los he visto llegar tan lejos, aunque en los sitios chinos hay mucho texto en los gráficos.

Xpath me salvó el día todo el tiempo, es un excelente lenguaje de dominio específico (en mi humilde opinión, podría estar equivocado) y puedes acceder a cualquier etiqueta de la página, aunque a veces es necesario modificarla.

Lo que sí extrañé fueron las 'plantillas inversas' (el marco del robot de selenio tiene esto).Perl tenía esto en el módulo CPAN Plantilla::Extracto, muy útil.

El análisis de HTML, o la creación del DOM, lo dejaría en manos del navegador, sí, no será tan rápido, pero funcionará todo el tiempo.

Además, las bibliotecas que pretenden ser Useragents son inútiles, los sitios están protegidos contra el scraping hoy en día y la representación del sitio en una pantalla real a menudo es necesaria para ir más allá de los captcha, pero también los eventos de JavaScript que deben activarse para que aparezca la información, etc. .

Watir si te gusta Ruby, Selenium para el resto, diría.El 'Human Emulator' (o Web Emulator en Rusia) está realmente hecho para este tipo de scraping, pero claro, es un producto ruso de una empresa que no oculta sus intenciones.

También creo que una de estas semanas Wiley publicará un nuevo libro sobre scraping, que debería ser interesante.Buena suerte...

personalmente encuentro http://github.com/shuber/curl/tree/master y http://simplehtmldom.sourceforge.net/ Impresionante para usar en mis proyectos PHP de spidering/scraping.

El Perl WWW::Mecanizar La biblioteca es excelente para hacer el trabajo pesado de interactuar con un sitio web para llegar a la página real que necesita.

Yo usaría LWP (Libwww para Perl).Aquí tienes una buena pequeña guía: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW::Scraper tiene documentos aquí: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.htmlPuede resultar útil como base; probablemente desee crear su propio módulo que se ajuste a las necesidades de minería de su restaurante.

LWP le brindará un rastreador básico sobre el cual puede desarrollar.

Ha habido varias respuestas recomendando Perl Mechanize, pero creo que Ruby Mechanize (muy similar a la versión de Perl) es incluso mejor.Maneja algunas cosas como formularios de una manera sintáctica mucho más limpia.Además, hay algunas interfaces que ejecutan en la parte superior de Ruby Mechanize que hacen las cosas aún más fáciles.

¿Qué idioma quieres usar?

curl con awk podría ser todo lo que necesitas.

Puedes usar ordenado para convertirlo a XHTML y luego utilizar cualquier herramienta de procesamiento XML que tenga disponible el idioma de su elección.

Yo lo recomiendo hermosasopa.No es el más rápido, pero funciona muy bien en lo que respecta a la falta de formato de las páginas (X)HTML, con las que se ahogan la mayoría de los analizadores.

lo que alguien dijo.

utilizar CUALQUIER IDIOMA.

Siempre que tenga una buena biblioteca de analizadores y una biblioteca http, estará listo.

las cosas del árbol son más lentas, entonces simplemente se usa una buena biblioteca de análisis.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top