Nemmeste måde at hente info ud af HTML?

Tags:    .net

Hej folkens,

Jeg har vha. en System.Net.WebRequest hentet HTML'en ud fra en side. Jeg vil så gerne trække en række informationer ud af den HTML.

Hvordan gøres det nemmest?



Indlæg senest redigeret d. 22.09.2008 13:39 af Bruger #2243
Typisk ved hjælp af Regular Expressions, vil jeg sige :). Hvis du ikke har helt styr på det, har Brian Hjøllund skrevet en rigtig god artikel om netop Regex: http://www.udvikleren.dk/Diverse/Article.aspx/322/

Hvis du kommer med lidt mere konkret information, fx hvilken tekst du skal have hentet ud fra hvilken kilde, kan vi nok hjælpe lidt bedre :)

Mvh.

Kasper (TSW)



RegEx kunne sagtens være en mulighed :) Vil lige kigge det i gennem. Nogen der kan give et eksempel på at bruge RegEx til det jeg søger? Har også overvejet om man kunne bruge sådan noget som XPath...?

HTML'en jeg vil hente info fra indeholder ganske almindelige tabels:
Fold kodeboks ind/udHTML kode 


... med nogle spans ind i mellem der hvor teksten står. Der er dog ikke altid et specifikt antal tabeller så den skal kunne selv finde ud af hvor mange der er og tage info ud af dem...



Hvis du skal bruge xpath skal det være xhtml.. Det vil være modigt at bygge det op sådan, men forsøg evt at parse det til et xmlDocument. Men der skal ikke mange markup fejl til før det driller.

Med regex behandles data som en streng. Jeg plejer at bruge : http://regexlib.com/default.aspx til at finde et regex, og evt moddet det selv lidt.

Der findes regex der fjerner alt markup, så du kun har tekst tilbage.


Et eksempel: http://blogs.msdn.com/noahc/archive/2007/02/19/get-a-web-page-s-title-from-a-url-c.aspx <- læs lige kommetarerne..




Indlæg senest redigeret d. 23.09.2008 09:43 af Bruger #5789
Mange tak Kasper og Jokke :)

Nu har jeg så fundet en RegEx kode der kan finde al HTML:
<\s*?[^>]+\s*?>

Hvordan benytter man den så til at fjerne al HTML og hente ren tekst ud af en streng med HTML?



Eller den her er måske endnu bedre?
<[\w\"\ '\#\* \=\',\.\\\(\)\/\-\$\{\}\[\]\|\*\?\+\^\&\:\%\;\!]+>



Fik endelig fundet en løsning ved at benytte den sidste regex jeg har postet. Ved at vide hvor mine info er i HTML'en kan jeg vha. den og en MatchCollection finde frem til hvilke positioner mine info er i tekst-strengen og derfra med substring hente info ud.



Jeg tror ikke du behøver at køre substring på strengen bagefter, men at regex klassen kan trække det direkte ud..

Se evt :

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

men ja, man har brug for at vide præcist hvor det står og kan desværre gå ned når "det andet site" piller ved frontenden.

Vh.

/J



Okay nej sad også og kiggede på det dér på MSDN, men kunne ikke få det til at virke...

Men nu virker det i hvert fald så tror bare jeg vil sige: "If it ain't broke, don't fix it..." :)



t