Aquí podría ser tu PUBLICIDAD


Opciones para raspar HTML?

votos
378

Estoy pensando en probar Beautiful Soup , un paquete de Python para raspar HTML. ¿Hay algún otro paquete de raspado HTML que debería estar mirando? Python no es un requisito, de hecho estoy interesado en escuchar sobre otros idiomas también.

La historia hasta ahora:

Publicado el 05/08/2008 a las 22:09
fuente por usuario Mark Harrison
En otros idiomas...        العربية       

40 respuestas

votos
54

El mundo Ruby equivalente a Beautiful Soup es por qué_the_lucky_stiff's Hpricot .

Respondida el 05/08/2008 a las 10:13
fuente por usuario Joey deVilla


Aquí podría ser tu PUBLICIDAD


votos
39

En el mundo .NET, recomiendo el HTML Agility Pack. No es tan simple como algunas de las opciones anteriores (como HTMLSQL), pero es muy flexible. Le permite generar HTML mal formado como si fuera XML bien formado, por lo que puede usar XPATH o simplemente iterar sobre nodos.

http://www.codeplex.com/htmlagilitypack

Respondida el 07/08/2008 a las 07:38
fuente por usuario Jon Galloway

votos
32

BeautifulSoup es una gran forma de ir a raspar HTML. Mi trabajo anterior me hizo rebuscar mucho y desearía saber sobre BeautifulSoup cuando comencé. Es como el DOM con muchas más opciones útiles y es mucho más pitónico. Si quieres probar Ruby transfirieron BeautifulSoup llamándolo RubyfulSoup pero no se ha actualizado en mucho tiempo.

Otras herramientas útiles son HTMLParser o sgmllib.SGMLParser, que son parte de la biblioteca estándar de Python. Funcionan llamando a métodos cada vez que ingresa / sale de una etiqueta y encuentra texto html. Son como Expat si estás familiarizado con eso. Estas bibliotecas son especialmente útiles si va a analizar archivos muy grandes y crear un árbol DOM sería largo y costoso.

Las expresiones regulares no son muy necesarias. BeautifulSoup maneja expresiones regulares por lo que si necesita su poder puede utilizarlo allí. Digo que vaya con BeautifulSoup a menos que necesite velocidad y una memoria más pequeña. Si encuentra un mejor analizador de HTML en Python, hágamelo saber.

Respondida el 07/08/2008 a las 07:18
fuente por usuario Cristian

votos
18

Considero que HTMLSQL es una forma ridículamente simple de screencrapear. Lleva literalmente minutos obtener resultados con eso.

Las consultas son súper intuitivas, como:

SELECT title from img WHERE $class == 'userpic'

Ahora hay algunas otras alternativas que toman el mismo enfoque.

Respondida el 07/08/2008 a las 07:31
fuente por usuario deadprogrammer

votos
16

La biblioteca Python lxml actúa como un enlace Pythonic para las bibliotecas libxml2 y libxslt. Me gusta particularmente su soporte XPath y la impresión bonita de la estructura XML en memoria. También es compatible con el análisis de HTML roto. Y no creo que pueda encontrar otras bibliotecas / enlaces de Python que analicen XML más rápido que lxml.

Respondida el 17/09/2008 a las 01:44
fuente por usuario akaihola

votos
15

Para Perl, hay WWW :: Mecanizar.

Respondida el 06/08/2008 a las 12:37
fuente por usuario andrewrk

votos
11

¿Por qué nadie ha mencionado todavía JSOUP para Java? http://jsoup.org/

Respondida el 10/02/2012 a las 08:42
fuente por usuario cookie_monster

votos
11

'Simple HTML DOM Parser' es una buena opción para PHP, si está familiarizado con los selectores de jQuery o JavaScript, entonces se encontrará en casa.

Encuéntralo aquí

También hay una publicación en el blog aquí.

Respondida el 31/07/2009 a las 08:39
fuente por usuario Orange Box

votos
10

Python tiene varias opciones para raspar HTML, además de sopa de Hermosa. Aquí están algunos otros:

  • mecanizar : similar a Perl WWW:Mechanize. Le da un navegador como objeto a ineract con las páginas web
  • lxml : enlace de Python a libwww. Soporta varias opciones para atravesar y seleccionar elementos (por ejemplo, XPath y selección CSS)
  • scrapemark : biblioteca de alto nivel utilizando plantillas para extraer información de HTML.
  • pyquery : le permite realizar consultas sobre jQuery como documentos XML.
  • scrapy : un raspado de alto nivel y el rastreo web marco. Puede ser utilizado para escribir las arañas, para la minería de datos y para la vigilancia y las pruebas automatizadas
Respondida el 28/12/2009 a las 05:59
fuente por usuario filippo

votos
9

El templatemaker utilidad de Adrian Holovaty (de Django fama) utiliza un enfoque muy interesante: le da de comer variaciones de la misma página y que "aprende", donde los "agujeros" de datos variables son. No es específico de HTML, por lo que sería bueno para raspar cualquier otro contenido de texto sin formato también. Lo he usado también para PDF y HTML convertidos a texto plano (con pdftotext y lynx, respectivamente).

Respondida el 18/09/2008 a las 09:13
fuente por usuario akaihola

votos
7

Sé y amo Screen-Scraper .

Screen-Scraper es una herramienta para extraer datos de sitios web. Screen-Scraper automatiza:

* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)

Usos comunes:

* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data

Técnico:

* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers

Tres ediciones de raspador de pantalla:

* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.
Respondida el 16/08/2009 a las 09:56
fuente por usuario ra9r

votos
7

Primero averiguaría si los sitios en cuestión proporcionan un servidor API o fuentes RSS para acceder a los datos que necesita.

Respondida el 05/08/2008 a las 10:11
fuente por usuario GateKiller


votos
5

He tenido cierto éxito con HtmlUnit , en Java. Es un marco simple para escribir pruebas unitarias en UI web, pero igualmente útil para raspar HTML.

Respondida el 31/08/2008 a las 01:09
fuente por usuario Henry

votos
5

Otra opción para Perl sería Web :: Scraper, que se basa en Ruby's Scrapi . En pocas palabras, con una sintaxis agradable y concisa, puede obtener un raspador robusto directamente en las estructuras de datos.

Respondida el 26/08/2008 a las 11:46
fuente por usuario dpavlin

votos
5

Scraping Stack Overflow es especialmente fácil con Shoes and Hpricot .

require 'hpricot'

Shoes.app :title => "Ask Stack Overflow", :width => 370 do
  SO_URL = "http://stackoverflow.com"
  stack do
    stack do
      caption "What is your question?"
      flow do
        @lookup = edit_line "stackoverflow", :width => "-115px"
        button "Ask", :width => "90px" do
          download SO_URL + "/search?s=" + @lookup.text do |s|
            doc = Hpricot(s.response.body)
            @rez.clear()
            (doc/:a).each do |l|
              href = l["href"]
              if href.to_s =~ /\/questions\/[0-9]+/ then
                @rez.append do
                  para(link(l.inner_text) { visit(SO_URL + href) })
                end
              end
            end
            @rez.show()
          end
        end
      end
    end
    stack :margin => 25 do
      background white, :radius => 20
      @rez = stack do
      end
    end
    @rez.hide()
  end
end
Respondida el 22/08/2008 a las 11:20
fuente por usuario Frank Krueger

votos
4

Hay también esta solución: Netty HttpClient

Respondida el 11/05/2011 a las 07:28
fuente por usuario jbst

votos
4

Otra herramienta para .NET es MhtBuilder

Respondida el 13/02/2009 a las 01:58
fuente por usuario GeekyMonkey

votos
4

A pesar de que fue diseñado para pruebas web .NET , he estado usando el framework WatiN para este propósito. Dado que está basado en DOM, es bastante fácil capturar HTML, texto o imágenes. Recentely, lo utilicé para volcar una lista de enlaces de una consulta de espacio de nombres MediaWiki All Pages en una hoja de cálculo de Excel. La siguiente fragmentación de código VB.NET es bastante cruda, pero funciona.


Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)

    Dim PagesLink As Link
    For Each PagesLink In PagesIE.TableBodies(2).Links
        With MyWorkSheet
            .Cells(XLRowCounterInt, 1) = PagesLink.Text
            .Cells(XLRowCounterInt, 2) = PagesLink.Url
        End With
        XLRowCounterInt = XLRowCounterInt + 1
    Next
End Sub
Respondida el 27/08/2008 a las 10:43
fuente por usuario JonnyGold

votos
4

He usado Beautiful Soup mucho con Python. Es mucho mejor que la comprobación de expresiones regulares, porque funciona como el DOM , incluso si el HTML está mal formateado. Puede encontrar rápidamente etiquetas HTML y texto con una sintaxis más simple que las expresiones regulares. Una vez que encuentre un elemento, puede iterar sobre él y sus elementos secundarios, lo cual es más útil para comprender los contenidos en el código que con las expresiones regulares. Desearía que Beautiful Soup existiera hace años cuando tenía que hacer muchos screencraping, me habría ahorrado mucho tiempo y dolores de cabeza ya que la estructura del HTML era muy pobre antes de que las personas comenzaran a validarlo.

Respondida el 22/08/2008 a las 02:58
fuente por usuario Acuminate

votos
4

Yo uso Hpricot en Ruby. Como ejemplo, este es un fragmento de código que utilizo para recuperar todos los títulos de libros de las seis páginas de mi cuenta de HireThings (ya que no parecen proporcionar una sola página con esta información):

pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
  pagerange.each do |page|
    resp, data = http.get "/perth_dotnet?page=#{page}" 
    if resp.class == Net::HTTPOK
      (Hpricot(data)/"h3 a").each { |a| puts a.innerText }
    end
  end
end 

Está bastante completo. Todo lo que viene antes son las importaciones de la biblioteca y la configuración de mi proxy.

Respondida el 06/08/2008 a las 06:57
fuente por usuario Mike Minutillo

votos
3

Bueno, si quiere que se haga desde el lado del cliente utilizando sólo un navegador que tiene jcrawl.com . Después de haber diseñado su servicio de desguace de la aplicación web ( http://www.jcrawl.com/app.html ), sólo tiene que añadir el script generado para una página HTML para comenzar a usar / presentación de sus datos.

Toda la lógica de desguace sucede en el navegador a través de JavaScript. Espero que le sea útil. Haga clic en este enlace para ver un ejemplo vivo que extrae la últimas noticias de Yahoo tenis .

Respondida el 29/10/2012 a las 04:59
fuente por usuario pedro

votos
3

Implementaciones del algoritmo de análisis HTML5 : html5lib (Python, Ruby), Validator.nu Analizador HTML (Java, JavaScript; C ++ en desarrollo), Hubbub (C), Twintsam (C #; próximo).

Respondida el 09/10/2008 a las 09:53
fuente por usuario hsivonen

votos
3

Serías un tonto si no usas Perl ... Aquí vienen las llamas ...

Conéctese con los siguientes módulos y ginsu cualquier raspado alrededor.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
Respondida el 17/09/2008 a las 01:56
fuente por usuario crojac

votos
3

En Java, puede usar TagSoup .

Respondida el 24/08/2008 a las 11:32
fuente por usuario Peter Hilton

votos
3

He usado LWP y HTML :: TreeBuilder con Perl y los he encontrado muy útiles.

LWP (abreviatura de libwww-perl) le permite conectarse a sitios web y raspar el HTML, puede obtener el módulo aquí y el libro de O'Reilly parece estar en línea aquí .

TreeBuilder le permite construir un árbol a partir del HTML, y la documentación y el origen están disponibles en HTML :: TreeBuilder - Parser que construye un árbol de sintaxis HTML .

Sin embargo, todavía podría haber mucho trabajo pesado que hacer con algo como este enfoque. No he revisado el módulo Mechanize sugerido por otra respuesta, así que puedo hacerlo.

Respondida el 17/08/2008 a las 03:13
fuente por usuario kaybenleroll

votos
2

Me gusta la función de cálculo de Google ImportXML (URL, XPath).

Se repetirá células largo de la columna si su expresión XPath devuelve más de un valor.

Puede tener hasta 50 importxml()funciones en una misma hoja de cálculo.

Plugin de Internet de RapidMiner también es bastante fácil de usar. Se puede hacer mensajes, acepta las cookies, y puede establecer el agente de usuario .

Respondida el 22/07/2010 a las 05:31
fuente por usuario Neil McGuigan

votos
2

También he tenido un gran éxito al utilizar Jaxer + jQuery de Aptana para analizar páginas. No es tan rápido ni tiene un estilo similar al de un script, pero los selectores de jQuery + JavaScript / DOM real son un salvavidas en páginas más complicadas (o mal formadas).

Respondida el 19/11/2008 a las 08:11
fuente por usuario kkubasik

votos
2

He tenido resultados mixtos en .NET usando SgmlReader, que originalmente fue iniciado por Chris Lovett y que parece haber sido actualizado por MindTouch .

Respondida el 27/08/2008 a las 07:49
fuente por usuario Shawn Miller

votos
2

Probablemente ya tenga mucho, pero creo que esto es lo que está tratando de hacer:

from __future__ import with_statement
import re, os

profile = ""

os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
    for line in f:
        profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")
Respondida el 05/08/2008 a las 11:58
fuente por usuario Grant

votos
1

Hago un montón de web avanzada raspado por lo quería tener un control total sobre mi pila y entender las limitaciones. Esta biblioteca web scraping es el resultado.

Respondida el 12/04/2011 a las 01:20
fuente por usuario hoju

votos
1

He estado usando Feedity - http://feedity.com para algunos de los trabajos de raspado (y conversión en los canales RSS) en mi biblioteca. Funciona bien para la mayoría de las páginas web.

Respondida el 01/12/2010 a las 06:28
fuente por usuario Justin Thomson

votos
1

El reciente discurso de Dav Glass Bienvenido a la selva! (2011 YUIConf Apertura Keynote) muestra cómo se puede utilizar YUI 3 en Node.js a hacer la programación del lado del cliente como (con selectores DOM en lugar de procesamiento de cadenas) en el servidor. Es muy impresionante.

Respondida el 22/11/2010 a las 06:04
fuente por usuario tim

votos
1

Para aplicaciones más complejas de raspado, recomendaría el raspador web IRobotSoft. Es un software libre dedicado para captura de imágenes. Tiene un fuerte lenguaje de consulta de páginas HTML, y proporciona una interfaz de grabación web muy simple que le liberará de muchos esfuerzo de programación.

Respondida el 17/05/2010 a las 04:58
fuente por usuario seagulf

votos
1

Scrubyt usa Ruby y Hpricot para hacer un web scraping agradable y fácil. Escribí un raspador para el servicio de biblioteca de mi universidad usando esto en aproximadamente 30 minutos.

Respondida el 25/08/2008 a las 01:02
fuente por usuario robintw

votos
1

Las expresiones regulares funcionan bastante bien para raspar HTML también ;-) Aunque después de mirar Beautiful Soup, puedo ver por qué esta sería una herramienta valiosa.

Respondida el 05/08/2008 a las 10:29
fuente por usuario pix0r

votos
0

Cuando se trata de la extracción de datos de un documento HTML en el lado del servidor, Node.js es una opción fantástica. Lo he utilizado con éxito con dos módulos llamados petición y cheerio .

Se puede ver un ejemplo de cómo funciona aquí .

Respondida el 10/05/2013 a las 07:28
fuente por usuario Hemerson Varela

votos
0

Hice una muy buena biblioteca Herramientas de Internet para el raspado web.

La idea es para que coincida con una plantilla contra la página web, que va a extraer todos los datos de la página y también validar si la estructura de la página no se ha modificado.

Por lo que sólo puede tomar el HTML de la página web que desea procesar, extraer todo el contenido dinámico o irrelevantes y anotar las partes interesantes.

Por ejemplo, el código HTML para una nueva pregunta en la página de índice stackoverflow.com es:

<div id="question-summary-11326954" class="question-summary narrow">

    <!-- skipped, this is getting too long -->

    <div class="summary">

        <h3><a title="Some times my tree list have vertical scroll ,then I scrolled very fast and the tree list shivered .Have any solution for this.
" class="question-hyperlink" href="/questions/11326954/about-scroll-bar-issue-in-tree">About Scroll bar issue in Tree</a></h3>

    <!-- skipped -->

    </div>
</div>

Por lo que acaba de quitar este id determinado, título y el resumen, para crear una plantilla que va a leer todas las nuevas preguntas en el título, resumen, enlace-arrays:

 <t:loop>
   <div class="question-summary narrow">
     <div class="summary">
       <h3>
          <a class="question-hyperlink">
            {title:=text(), summary:=@title, link:=@href}
          </a>
       </h3>
     </div>
   </div>
 </t:loop>

Y por supuesto, también es compatible con las técnicas básicas, CSS 3 selectores XPath, 2 y 1 XQuery expresiones.

El único problema es que yo era tan tonto para que sea un Free Pascal biblioteca. Pero también existe independiente del lenguaje de demostración web .

Respondida el 04/07/2012 a las 11:43
fuente por usuario BeniBela

votos
0

Para aquellos que prefieren una herramienta de flujo de trabajo gráfico, RapidMiner (FOSS) tiene un buen rastreo web y raspando las instalaciones.

Aquí hay una serie de videos:

http://vancouverdata.blogspot.com/2011/04/rapidminer-web-crawling-rapid-miner-web.html

Respondida el 04/04/2011 a las 11:44
fuente por usuario Neil McGuigan

votos
-1

SharpQuery

Se trata básicamente de jQuery para C #. Depende de HTML agilidad paquete para analizar el código HTML.

Respondida el 01/12/2010 a las 06:41
fuente por usuario mpen


Aquí podría ser tu PUBLICIDAD