Avatar billede deamill Nybegynder
24. marts 2010 - 18:21 Der er 8 kommentarer og
1 løsning

Hennte en hjemmeside over i en string?

Hejsa,

Jeg sad i kiggede på den her tråd:
http://www.eksperten.dk/spm/402366

Her er der en venlig sjæl (odegaard) som giver et eksempel på hvordan man kan hente en hjemmeside fil ind i en string, det er så den komplette fil imkl. alt html kode.

Koden:
Public Function GetUrl(url As string ) As String
    Dim request As WebRequest = WebRequest.Create(url)
    Dim response As WebResponse = request.GetResponse()
    Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
    Dim rtrnValue As String = String.Copy(reader.ReadToEnd())
    Reader.Close
    return rtrnValue
End Function

Ovenstående virker perfekt!

Er der nogen som har en god ide til hvordan man evt. kan gøre det samme som ovenstående, blot efter at hjemmeside filen er blevet fortolket? Altså så jeg ikke får alt det html kode med, men kun det som brugeren ville se?

Altså lidt ala hvis jeg åbnede hjemmesiden, markerede det hele, kopierer det, og går over i word og lavede en indsæt speciel -> Som tekst.

På forhånd tak.
Avatar billede arne_v Ekspert
24. marts 2010 - 18:31 #1
Den her kode er ikke 100% robust, men den maa give lidt ideer:

Imports System
Imports System.Text.RegularExpressions

Namespace E
    Public Class Program
        Private Shared ReadOnly re As New Regex("<[^>]*>", RegexOptions.Compiled Or RegexOptions.Singleline)
        Public Shared Function Strip(s As String) As String
            Return re.Replace(s, "")
        End Function
        Public Shared Sub Main(args As String())
            Dim html As String = "<html>" & vbCr & vbLf & "<head>" & vbCr & vbLf & "<title>Test</title>" & vbCr & vbLf & "</head>" & vbCr & vbLf & "<body>" & vbCr & vbLf & "<h1>Test</h1>" & vbCr & vbLf & "<p>bla bla</p>" & vbCr & vbLf & "<p>mere bla bla</p>" & vbCr & vbLf & "</body>" & vbCr & vbLf & "</html>"
            Console.WriteLine(html)
            Console.WriteLine(Strip(html))
            Console.ReadKey()
        End Sub
    End Class
End Namespace
Avatar billede arne_v Ekspert
24. marts 2010 - 18:34 #2
String.Copy er ioevrigt overfloedig.

Og hvis det virkeligt er saa simpelt er WebClient nemmere end (Http)WebRequest.
Avatar billede deamill Nybegynder
24. marts 2010 - 19:09 #3
Hmm, kigger lidt på det, men kan ikke lige gennemskue hvordan jeg kalder koden (har ikke rodet med namespace før).
Avatar billede arne_v Ekspert
24. marts 2010 - 19:13 #4
Dim html As String = GetUrl(...)
Dim text As String = Strip(html)

hvis GetUrl og Strip er i samme klasse.
Avatar billede deamill Nybegynder
25. marts 2010 - 09:08 #5
Hej, jeg er ikke helt sikker på om det er det her jeg vil..

Men kan du forklare mig hvad der sker her? Det har jeg lidt svært ved at gennemskue.

Private Shared ReadOnly re As New Regex("<[^>]*>", RegexOptions.Compiled Or RegexOptions.Singleline)
Avatar billede deamill Nybegynder
25. marts 2010 - 11:16 #6
Jeg har lige opdaget at den her function

Public Function GetUrl(url As string ) As String
    Dim request As WebRequest = WebRequest.Create(url)
    Dim response As WebResponse = request.GetResponse()
    Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
    Dim rtrnValue As String = String.Copy(reader.ReadToEnd())
    Reader.Close
    return rtrnValue
End Function

Den ikke returnerer æ, ø og å, nogen som ved hvorfor?
Avatar billede arne_v Ekspert
25. marts 2010 - 14:10 #7
"<[^>]*>" er en regex med:
  en enkelt <
  0-mange tegn forskellig fra >
  en enkelt >
Avatar billede arne_v Ekspert
25. marts 2010 - 14:12 #8
Dim reader As StreamReader = New StreamReader(response.GetResponseStream())

->

  Dim reader As StreamReader = New StreamReader(response.GetResponseStream(), Encoding.UTF8)

eller

  Dim reader As StreamReader = New StreamReader(response.GetResponseStream(), Encoding.Default)
Avatar billede arne_v Ekspert
26. april 2010 - 03:09 #9
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester