language agnostic - la mejor biblioteca para hacer raspado de web
language-agnostic class-library (13)
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 usar para extraer estos datos de un conjunto determinado de sitios?
¿Qué idioma quieres usar?
curl con awk podría ser todo lo que necesitas.
Creo que la respuesta general aquí es usar cualquier lenguaje + biblioteca http + analizador html / xpath. Encuentro que usar ruby + hpricot brinda una buena solución limpia:
require ''rubygems''
require ''hpricot''
require ''open-uri''
sites = %w(http://www.google.com http://www..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 más información sobre Hpricot ver http://code.whytheluckystiff.net/hpricot/
El HTML Agility Pack para programadores .net es increíble. 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
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 formas de una manera mucho más limpia sintácticamente. Además, hay algunas interfaces que se ejecutan sobre Ruby Mechanize que facilitan las cosas.
La biblioteca Perl WWW :: Mechanize es excelente para hacer el trabajo de burro de interactuar con un sitio web para llegar a la página real que necesita.
Personalmente me gusta el módulo WWW :: Mechanize Perl para este tipo de tareas. Le da un objeto que se modela según un navegador web típico (es decir, puede seguir enlaces, completar formularios o usar el "botón Atrás" al llamar a métodos).
Para la extracción del contenido real, puede conectarlo a HTML :: TreeBuilder para transformar el sitio web que está visitando actualmente en un árbol de objetos HTML :: Element , y extraer los datos que desee (el método look_down()
de HTML::Element
es especialmente útil).
Puedes usar tidy para convertirlo a XHTML, y luego usar las instalaciones de procesamiento XML que tu idioma de elección tenga disponible.
Si usa Python, eche un vistazo a Beautiful Soup ( http://crummy.com/software/BeautifulSoup ).
Una biblioteca extremadamente capaz, hace que rascar sea muy fácil.
Yo recomendaría BeautifulSoup . No es el más rápido, pero funciona muy bien en lo que respecta a la mala calidad de las páginas (X) HTML que la mayoría de los analizadores se atragantan.
Yo usaría LWP (Libwww para Perl). Aquí hay una buena 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.html Puede ser útil como base, probablemente quieras crear tu propio módulo que se ajuste a tu restaurante. necesariamente.
LWP le daría un rastreador básico para que pueda construir.
Personalmente encuentro http://github.com/shuber/curl/tree/master y http://simplehtmldom.sourceforge.net/ awesome para usar en mis proyectos de spidering / scraping de PHP.
lo que alguien dijo
use CUALQUIER IDIOMA.
siempre que tengas una buena biblioteca de analizador y una biblioteca http, estarás configurado.
las cosas del árbol son más lentas, y luego usan una buena biblioteca de análisis sintáctico.
Creo que watir o selenio son las mejores opciones. La mayoría de las otras bibliotecas mencionadas son en realidad analizadores de HTML, y eso no es lo que quieres ... Estás raspando, si el propietario del sitio web quisiera que obtuvieras sus datos, pondría un volcado de su base de datos o sitio en un torrent y evitar todas las solicitudes http y el tráfico costoso.
básicamente, necesita 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 a un usuario. Necesitas usar un programa de captura de pantalla para llegar a los captchas y enviarlos a decaptcha.com (que los resuelve por una fracción de un centavo) para eludir eso. olvídate de guardar ese archivo captcha analizando el html sin renderizarlo en un navegador ''como se supone que debe verse''. Estás screenscraping, no httprequestscraping.
watir hizo el truco para mí en combinación con autoitx (para mover el mouse e ingresar las teclas en los campos -> a veces esto es necesario para establecer los eventos javascript correctos) y una sencilla utilidad de captura de pantalla para el captcha. de esta forma serás más exitoso, 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ática? No, solo obtén una biblioteca de OCR y alimenta 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 específico del dominio (en mi humilde opinión, podría estar equivocado) y puede acceder a cualquier etiqueta en la página, aunque a veces es necesario modificarlo.
Lo que sí extrañé fue ''plantillas inversas'' (el marco de robot de selenio tiene esto). Perl tenía esto en el módulo CPAN Template :: Extract, muy útil.
El análisis html, o la creación del DOM, dejaría al navegador, sí, no será tan rápido, pero funcionará todo el tiempo.
También las bibliotecas que pretenden ser Useragents son inútiles, los sitios están protegidos contra raspado en la actualidad, y la representación del sitio en una pantalla real es a menudo necesaria para ir más allá del captcha, pero también eventos de JavaScript que deben activarse para que aparezca la información, etc. .
Watir, si te gusta Ruby, Selenium, por lo demás, diría. El ''Emulador Humano'' (o Emulador Web en Rusia) está hecho para este tipo de raspado, pero de nuevo es un producto ruso de una compañía que no oculta sus intenciones.
También creo que una de estas semanas que Wiley tiene un nuevo libro sobre raspado, eso debería ser interesante. Buena suerte...