Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


MSHTML

Postades av 2004-05-14 07:11:25 - Ola Ljungcrantz, i forum vb.net, Tråden har 19 Kommentarer och lästs av 3533 personer

Jag gör ett nytt försök även i detta forum! Det här kan väl inte vara så svårt?

Jag tänkte jag skulle göra ett litet program i VB.net som hämtar data regelbundet t ex en gång/ minut från en speciell hemsida. I det här fallet tänkte jag hämta kursen för SAX indexet som finns till höger hos www.nordnet.nu. Hur gör man det? Det lär finnas bra sätt genom att använda MSHTML.
Skulle bli överlycklig om någon kunde få ihop ett program där jag kan se hur man gör.

Mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-14 08:33:26 - Johan Bovin

1: Är det bara SAX indexet du är intresserad av eller hur man gör rent generellt? Om det är börskurser och sånt du är ute efter så kan jag rekommendera http://se.finance.yahoo.com/ där man kan hämta kurser etc i csv format. mycket enklare att hantera.

2: Mitt förslag är att du tittar på System.Net.WebRequest och System.Net.Webresponse klasserna.

<code>
Private Function GetSAX() As Double
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
Dim url As String = "http://se.finance.yahoo.com/d/quotes.csv?s=^SXAXPI&f=sl1d1t1c1ohgv&e=.csv"
Dim objRequest As WebRequest = WebRequest.Create(url)
Dim objResponse As WebResponse = objRequest.GetResponse()
Dim oSR As StreamReader = New StreamReader (objResponse.GetResponseStream())
Dim strContent As String = oSR.ReadToEnd()
Dim things As String = strContent.Split(New Char() {","C})
If things.Length = 9 Then
Return Double.Parse(things(1))
Else
Return -1
End If
End Function
</code>
Sen en som jag bjuder på... hur man hämtar en aktiekurs (kolla tickers på yahoo men oftast är det vanligar tickern fast med .ST i slutet. Ericsson B blir t.ex. ERICb.ST
<code>
Public Sub GetQuote(ByVal ticker As String)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
Dim url As String = "http://se.finance.yahoo.com/d/quotes.csv?s=" + ticker + "&m=ST&f=sl1d1t1c1ohgv&e=.csv"
Dim objRequest As WebRequest = WebRequest.Create(url)
Dim objResponse As WebResponse = objRequest.GetResponse()
Dim oSR As StreamReader = New StreamReader (objResponse.GetResponseStream())
Dim strContent As String = oSR.ReadToEnd()
Dim things As String = strContent.Split(New Char() {","C})
If things.Length = 9 AndAlso things(0) = ticker Then
Try
Dim latest As Double = Double.Parse(things(1))
Dim date As DateTime = DateTime.Parse(things(2) + " " + things(3))
Dim increaseToday As Double = Double.Parse(things(4))
Dim buy As Double = Double.Parse(things(5))
Dim lowest As Double = Double.Parse(things(6))
Dim highest As Double = Double.Parse(things(7))
Dim volatility As Double = Double.Parse(things(8))
'här kan du använda variablerna till vad du tycker är lämpligt
Catch e As Exception
End Try
End If
End Sub
</code>
Glöm inte importera System.Threading, System.Net.

Mina erfarenheter av mshtml och .net är inte de bästa, dessutom finns väl allt i frameworket så länge du inte vill visa html sidorna grafiskt...


Svara

Sv: MSHTML

Postades av 2004-05-14 08:45:44 - Ola Ljungcrantz

Tack Arathorn!

Jo, det är rent generellt hur man gör. Jag ska studera dina förslag i helgen.

mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-14 09:47:24 - Ola Ljungcrantz

Det primära är hur man hämtar info från en specifik plats på en hemsida. Det var därför jag tog ett exempel enligt #0. Jag måste läsa på för att förstå din kod Arathorn. Jag vet inte om det är det som sker. Skulle vara bra ifall någon kunde lösa det exemplet som jag tog upp.

mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-14 10:27:22 - Johan Bovin

ok, jag skulle nog ha kommenterat lite mer...
WebRequest.Create(url)'skapar en förfrågan till en webplats kan ju vara vilken som helst
Dim objRequest As WebRequest =
objRequest.GetResponse() 'hämtar svaret som servern skickar tillbaka
New StreamReader (objResponse.GetResponseStream()) 'skapar en ström så att vi lättare kan läsa innehållet
Dim strContent As String = oSR.ReadToEnd() 'stoppar in innehållet i en sträng.
Om du hade hämtat en vanlig hemsida har du alltså fått all html-kod i strContent. I mitt exempel råkar det ju vara en komma sepererad "fil" som kommer tillbaka. jag skall se om jag kan skriva ihop nåt som exakt hämtar ut det från nordnet men i praktiken så måste du ju leta rätt på den html-tagg där informationen ligger och extrakta den... problemet är ju att ta sig till rätt tagg.

EDIT: så här skulle det kunna se ut:
<code>
Private Function GetSAX() As Double
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
Dim url As String = "http://www.nordnet.se"
Dim objRequest As WebRequest = WebRequest.Create(url)
Dim objResponse As WebResponse = objRequest.GetResponse()
Dim oSR As StreamReader = New StreamReader (objResponse.GetResponseStream())
Dim strContent As String = oSR.ReadToEnd()
'odynamisk lösning som kräver att sidan inte ändrar på sig...
Dim pos As Integer = strContent.IndexOf("alt=""SAX""") 'hitta taggen ovanför sax-td
If pos > -1 Then
'OBS ingen error hantering... egentligen borde man kolla att all info är rätt och att pos inte är -1
pos = strContent.IndexOf("<td", pos) 'hämta positionen för nästa tagg...
pos = strContent.IndexOf(">", pos) 'hämta slutet på taggen
Dim end As Integer = strContent.IndexOf("<", pos += 1) 'hämta positionen för nästa tagg
Dim sax As String = strContent.Substring(pos, end - pos) 'hämta det mellan taggarna
sax = System.Web.HttpUtility.HtmlDecode(sax) 'städa html
Return Double.Parse(sax.Trim()) 'parsa till en double
Else
Return -1
End If
End Function
</code>


Svara

Sv: MSHTML

Postades av 2004-05-14 11:08:19 - Ola Ljungcrantz

Lysande! Jag ska testa när jag kommer hem ikväll.

Många tack Johan!

mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-15 21:22:32 - Mikael Wedham

Nytt försök, då mitt gamla försvann ?

<code>
Imports System.Net
Imports System.Text

Sub ScreenScrape(ByVal strURL As String, ByVal strFilename As String)
Dim objWebClient As New WebClient()
Dim objUTF8 As New UTF8Encoding()
Dim strScrape As String
strScrape = objUTF8.GetString(objWebClient.DownloadData(strURL))
Dim objReader = New System.IO.StreamWriter(strFilename)
objReader.Write(strScrape)
objReader.Close()
End Sub

</code>

Sök på nätet efter screenscraping

/micke


Svara

Sv: MSHTML

Postades av 2004-05-16 16:42:42 - Ola Ljungcrantz

Tack micke! Jag ska försöka förstå vad som sker rad för rad....

mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-22 13:14:59 - Andreas Håkansson

Ola,

Löste ditt problem sig eller behöver du mer hjälp? Om du är klar med detta problemet så markera inlägget som antingen löst (om du hittat en lösning - skriva gärna vad den var så andra kan ta del av både fråga och svar) eller stängd (om du inte hittat en lösning men problemet inte är aktuellt längre).

Om du inte löst problemet och vill ha mer hjälp så skriv ett inlägg som beskriver var du står idag med problemet (vad du har provat etc) så skall vi se om vi inte kan hitta en lösning.

//Andreas


Svara

Sv: MSHTML

Postades av 2004-05-22 19:52:24 - Ola Ljungcrantz

Jag har talat med Johan och hans förslag börjar klarna för mig. Men mickes förslag skulle jag också gärna vilja förstå och få att fungera. När man är nybörjare så är, som jag ser det, ett fungerande exempel det som krävs för att man ska kunna förstå koden. Vad jag kan se är mickes kod ett förslag men inte ett fungerande exempel. Skulle vilja att micke (eller någon annan) ger ett exempel med förklarande text. Det är väl det som saknas tycker jag innan jag stänger den här tråden.

Mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-22 20:45:30 - Andreas Håkansson

Ola,

Då ger vi det ett försök. Marcus lösning skiljer sig lite från Johans exempel då det visar hur man laddar ner innehållet på en webbsida till en fil. Denna fil kan du se använda för att söka efter specifik information. Johans exempel visade hur man sökte information också - utan att spara hela webbsidan. Jag ger en detaljerad beskrivning på vad Marcus gör så det inte blir några missförstånd.

Imports System.Net
Imports System.Text


Importera de namnrymder som vi kommer att behöva. Ur <b>System.Net</b> kommer vi att använda <b>WebClient</b> klassen och ut <b>System.Text</b> kommer vi att använda <b>UTF8Encoding</b> klassen.

Sub ScreenScrape(ByVal strURL As String, ByVal strFilename As String)


Skapa den funktion som vi anropar för att ladda ner webbsidan som anges av <b>strURL</b> variablen och som skall sparas i filen med namnet som anges av <b>strFilename</b> variablen.

Dim objWebClient As New WebClient()


Skapa ett WebClient objekt som vi kommer att använda för att ladda ner den angivna webbsidans innehåll (HTML kod).

Dim objUTF8 As New UTF8Encoding()


Skapa ett UTF8Encoding objekt som kommer användas för att se till att vi kan konvertera innehållet från webbsidan till en sträng med rätt teckenuppsättning.

Dim strScrape As String


Skapa en strängvariabel som vi kommer lagra webbsidans innehåll i.

strScrape = objUTF8.GetString(objWebClient.DownloadData(strURL))


Här händer ett par olika saker. Först laddas webbsidans innehåll ner med <b>DownloadData</b> metoden. Denna metod returnerar en byte-array som skickas vidare till <b>GetString</b> metoden som omvlandar den till en sträng med rätt teckenuppsättning. Slutligen sparas strängen i vår strängvariabel <b>strScrape</b>

Dim objReader = New System.IO.StreamWriter(strFilename)


Skapa en StreamWriter som gör att vi kan skriva innehåll ner till en fil med det angivna namnet.

objReader.Write(strScrape)


Skriv ut webbsidans innehåll (som lagrad i vår variabel) till filen.

objReader.Close()


Stäng filen.

End Sub


Avsluta funktionen.


//Andreas


Svara

Sv: MSHTML

Postades av 2004-05-22 21:29:01 - Oskar Johansson

Kommentar:
<code>
Dim objUTF8 As New UTF8Encoding()
</code>
Det där är riktigt lyxigt ;) Jag skulle förslå att man kör följande:
<code>
Dim objUTF8 As UTF8Encoding
objUTF8 = UTF8Encoding.UTF8
</code>
så att om man skulle köra det här flera gånger så behöver man inte köra skapa en ny UTF8-encoding hela tiden; istället skapas den en gång och "slängs" in i en static variable. Enda nackdelen är lite minne blir "låst", men det kan ge lite högre prestanda.


Svara

Sv: MSHTML

Postades av 2004-05-22 23:01:25 - Ola Ljungcrantz

Tack Andreas och Onkelborg!

En liten fråga bara.

Om man tänker sig att man har en Web sida som ger realtidskurs för t ex, Ericsson, en för Nokia osv. för låt oss säga 100 aktier. Är det då rimligt att tänka sig att använda denna metod för att läsa av kurserna för samtliga dessa, kanske en gång i sekunden?

mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-22 23:21:09 - Andreas Håkansson

Ola,

Visst är det det om du inte kan hitta någon WebService som ervbjuder dig att läsa av denna information på ett enklare sätt. Du kanske skulle kunna använda dig av http://www.webservicex.net/WS/WSDetails.aspx?CATID=2&WSID=9 för att hämta det? Om du skall göra det själv så tänk på att du skall be ägaren av sidan som du hämtar information ifrån om tillåtelse pga av två anledningar.

(1) Materialet är upphovsrättsskyddat om det inte utryckligen står att det inte är det

(2) Det kan se lite underligt ut i deras loggar om de får en request tillsamma sida varje minut. De kan blockera dig, anmäla dig etc om de misstänker att du försöker göra något dumt (dåligt försökt till DoS attack eller vad som helst).

//Andreas


Svara

Sv: MSHTML

Postades av 2004-05-23 13:36:05 - Ola Ljungcrantz

Tack för svaret Andreas.
Eftersom du pekar på att det kan bli problem så är det lika bra att tala med dem alt. köpa informationen på något vis. Jag visste inte att det var så. Kan det vara olagligt att läsa info. från en sida med ett egenutvecklat program på samma sätt som explorer läser samma ínfo? Lite konstigt tycker jag. Så det var bra att du pekade på det problemet.

mvh Ola


Svara

Sv: MSHTML

Postades av 2004-05-23 13:39:45 - Andreas Håkansson

Ola,

Visst är det inte olagligt att läsa informatione, men att läsa information från sidan och sen bearbetat och återanvända den kan lämna lite att fundera på. De lägger troligen ner mycket arbete på att sammanställa korrekt och aktuell information och du skulle isf ta och använda resultatet av detta för att gynna dig själv. Det är där det börjar bli klurigt, om jag inte minns fel så hade BJ (medlem här på pellesoft) samma bekymmer för något år sedan då han hämtade väderinformation från SMHI och använde det i sitt program.

Du skulle kanske kunna använda den WebService som jag pekade dig till? De har granaterat avtal med stället de hämtar information ifrån och du får använda deras WebService utan kostnad (har jag för mig).

//Andreas


Svara

Sv: MSHTML

Postades av 2004-05-23 13:50:58 - Ola Ljungcrantz

OK, jag förstår.
Ska undersöka om det går att använda ditt tips. Informationen måste vara i realtid. Det är det viktigaste. Jag ska se vad det finns för leverantörer som säljer sådan info.

//Ola


Svara

Sv: MSHTML

Postades av 2004-06-21 15:20:15 - Per Höglund

prova med börsdata ! 08-52727200


Svara

Sv: MSHTML

Postades av 2004-08-10 12:11:05 - Ola Ljungcrantz

Jag försöker hämta hem data från Stockholmsbörsen men det går inte att läsa deras sida. Har försökt med ett par olika metoder men det lyckas inte. Att läsa t ex aftonbladet.se fungerar men inte: http://www.stockholmsborsen.se/index.asp

Har någon en förklaring och/eller en lösning på detta problem. Jag står bara och stampar nu. Måste lösa detta för att komma vidare.

mvh Ola


Svara

Sv: MSHTML

Postades av 2004-08-13 04:32:35 - Thomas Vanhaniemi

Som jag beskrev via imail så måste du nog ansluta genom en socket och skicka samt ta emot datat den vägen för att det ska fungera med den servern...

Mvh,
Thomas


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 722
27 958
271 751
224
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies