woorank sitios pagina informe herramientas gratis google analizar analisis c# html xml html-content-extraction
SgmlReader.zip

c# - sitios - informe seo



C#- ¿Cuál es el mejor enfoque para analizar páginas web? (8)

Estoy de acuerdo con Chris Lively, porque el HTML a menudo no está muy bien formado, probablemente seas mejor con una expresión regular para esto.

href=[/"/'](http:////|/.//|//)?/w+(/./w+)*(///w+(/./w+)?)*(//|/?/w*=/w*(&/w*=/w*)*)?[/"/']

De aquí en adelante, RegExLib debería ayudarlo a comenzar

He guardado el html de una página web completa en una cadena, y ahora quiero obtener los valores "href" de los enlaces, preferiblemente con la posibilidad de guardarlos en diferentes cadenas más adelante. ¿Cuál es la mejor manera de hacer esto?

Intenté guardar la cadena como un documento .xml y analizarla utilizando un navegador XPathDocument, pero (sorpresa sorpresa) no navega demasiado bien en un documento que no sea realmente un xml.

¿Las expresiones regulares son la mejor manera de lograr lo que intento lograr?


Para tratar con HTML de todas las formas y tamaños, prefiero usar el paquete HTMLAgility en http://www.codeplex.com/htmlagilitypack, que le permite escribir XPaths contra los nodos que desea y obtener esos retornos en una colección.


Puede tener más suerte usando xml si sabe o puede arreglar el documento para que esté al menos bien formado. Si tiene un buen html (o más bien, xhtml), el sistema xml en .Net debería ser capaz de manejarlo. Lamentablemente, un buen html es extremadamente raro.

Por otro lado, las expresiones regulares son realmente malas para analizar html. Afortunadamente, no necesita manejar una especificación html completa. Todo lo que debe preocuparse es analizar href= cadenas para obtener la url. Incluso esto puede ser complicado, así que no intentaré hacerlo de inmediato. En cambio, comenzaré haciendo algunas preguntas para intentar establecer algunas reglas básicas. Básicamente todos se reducen a "¿Cuánto sabes sobre el documento?", Pero aquí va:

  • ¿Sabes si el texto "href" siempre estará en minúsculas?
  • ¿Sabes si siempre usará comillas dobles, comillas simples o nada en la url?
  • ¿Es siempre una URL válida, o necesita dar cuenta de cosas como ''#'', declaraciones de JavaScript y similares?
  • ¿Es posible trabajar con un documento donde el contenido describe características html (IE: href= también podría estar en el documento y no pertenecer a una etiqueta de anclaje)?
  • ¿Qué más puedes decirnos sobre el documento?

Puedo recomendar el HTML Agility Pack . Lo he usado en algunos casos donde necesitaba analizar HTML y funciona muy bien. Una vez que cargue su HTML en él, puede usar expresiones XPath para consultar el documento y obtener sus etiquetas de anclaje (y casi cualquier otra cosa).

HtmlDocument yourDoc = // load your HTML; int someCount = yourDoc.DocumentNode.SelectNodes("your_xpath").Count;


Probablemente quieras algo como el analizador Majestic: http://www.majestic12.co.uk/projects/html_parser.php

Hay algunas otras opciones que también pueden ocuparse de flaky html. El paquete Html Agility vale la pena, como alguien más mencionó.

No creo que las expresiones regulares sean una solución ideal para HTML, ya que HTML no está libre de contexto. Probablemente produzcan un resultado adecuado, aunque impreciso; incluso la identificación determinista de un URI es un problema complicado.


Siempre es mejor, si es posible, no redescubrir la rueda. Existen algunas buenas herramientas que convierten HTML a XML bien formado o actúan como un XmlReader:

Aquí hay tres buenas herramientas:

  1. TagSoup , un programa de fuente abierta, es una herramienta basada en Java y SAX, desarrollada por John Cowan . Este es un analizador compatible con SAX escrito en Java que, en lugar de analizar un XML bien formado o válido, analiza HTML tal como se lo encuentra en estado salvaje: pobre, desagradable y brutal, aunque a menudo lejos de ser corto. TagSoup está diseñado para personas que tienen que procesar este material utilizando una apariencia de diseño de aplicación racional. Al proporcionar una interfaz SAX, permite que las herramientas XML estándar se apliquen incluso al peor HTML. TagSoup también incluye un procesador de línea de comandos que lee archivos HTML y puede generar HTML limpio o XML bien formado que es una aproximación cercana a XHTML.
    Taggle es un puerto comercial de C ++ de TagSoup.

  2. SgmlReader es una herramienta desarrollada por Chris Lovett de Microsoft.
    SgmlReader es una API de XmlReader sobre cualquier documento SGML (incluido el soporte integrado para HTML). También se proporciona una utilidad de línea de comandos que genera el resultado XML bien formado.
    Descargue el archivo zip incluyendo el ejecutable independiente y el código fuente completo: SgmlReader.zip

  3. Un logro sobresaliente es el puro analizador de HTML XSLT 2.0 escrito por David Carlisle .

Leer su código sería un gran ejercicio de aprendizaje para todos nosotros.

De la descripción:

" d: htmlparse (cadena)
d: htmlparse (cadena, espacio de nombres, modo html)

La forma de un argumento es equivalente a)
d: htmlparse (string, '' http://ww.w3.org/1999/xhtml '', true ()))

Analiza la cadena como HTML y / o XML utilizando algunas heurísticas incorporadas a)
controlar la apertura y el cierre implícitos de los elementos.

No tiene pleno conocimiento de HTML DTD, pero sí tiene una lista completa de
elementos vacíos y lista completa de definiciones de entidades. Entidades HTML, y
las referencias de caracteres hexadecimales y decimales son todas aceptadas. Tenga en cuenta html-entities
se reconocen incluso si html-mode = false ().

Los nombres de los elementos están en minúscula (si html-mode es verdadero ()) y se colocan en el
espacio de nombres especificado por el parámetro de espacio de nombres (que puede ser "" para indicar
sin espacio de nombres a menos que la entrada tenga declaraciones explícitas del espacio de nombres, en
qué caso se honrarán.

Los nombres de atributos están en minúsculas si html-mode = true () "

Lea una descripción más detallada aquí .

Espero que esto haya ayudado.

Aclamaciones,

Dimitre Novatchev.


Las expresiones regulares son una forma de hacerlo, pero pueden ser problemáticas.

La mayoría de las páginas HTML no se pueden analizar utilizando técnicas html estándar porque, como descubriste, la mayoría no se validan.

Podría pasar el tiempo tratando de integrar HTML Tidy o una herramienta similar, pero sería mucho más rápido crear la expresión regular que necesita.

ACTUALIZAR

En el momento de esta actualización, recibí 15 up up y 9 downvotes. Creo que tal vez la gente no está leyendo la pregunta ni los comentarios sobre esta respuesta. Todo lo que OP quería hacer era tomar los valores href. Eso es. Desde esa perspectiva, una expresión regular simple está bien. Si el autor hubiera querido analizar otros elementos, entonces no hay forma de que recomiende la expresión regular como dije al principio, en el mejor de los casos es problemática.