PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vb.net Yahoo Parser TuTorial



N4umb3rs1NName
10.04.2010, 14:28
Heute möchte ich euch mein Änfänger Tutorial zum Basteln eines Yahoo Parser's zeigen, mit dem ihr automatisch Suchergebnisse schön in einer Liste in euerem Programm Anzeigen könnt.

Vorab: Dieses Tutorial ist für blutige VB.net Anfänger geschrieben, also bitte nicht bemängeln das ich zu Ausführlich darauf eingegangen bin :)

Wie Solls Funktionieren?

1.)Suchseite von Yahoo

http://search.yahoo.com/search?p=asdf&b=11
p=Der Suchbegriff
b=Seite * Anzahl der zu Anzeigenden Ergebnisse(Standart 10) + 1

Das bedeutet wir können eine Schleife verwenden die Die Variablen immer automatisch in die Url einsetzt:


Seite 1
http://search.yahoo.com/search?p=#SUCHBEGRIFF#&b=11
Seite 2
http://search.yahoo.com/search?p=#SUCHBEGRIFF#&b=21
Seite 3
http://search.yahoo.com/search?p=#SUCHBEGRIFF#&b=31
Warum immer 11 / 21 / 31?
(Seite * 10) + 1
Yahoo verwendet dies automatisch bei der Suche

2.)Wann sind alle Seiten durch
Yahoo wiederholt automatisch die Inhalte der Suche der letzten Seite sobald die letzte Seite erreicht ist.
Seite 2 existiert noch
http://search.yahoo.com/search?p=#SUCHBEGRIFF#&b=21

Seite 3 hat gleiche Ergebnisse wie Seite 2 : Ende erreicht
http://search.yahoo.com/search?p=#SUCHBEGRIFF#&b=31

3.)Wie Links auslesen?

In einer Schleife wird der Quelltext nach dem Muster das grundsetztlich vor und nach relevanten Links auftaucht aufgesplittet.
Muster Vor Link:

**http%3a//Muster Nach Link

"2.)Code Realisierung

Der erste Inhalt im Quelltext wird also nach den Link Mustern aufgesplittet und wird danach abgeschnitten vom Quelltext, sodass die Schleife beim nächsten Mal nicht den gleichen Link wiederfindet.
Danach wird noch abgeprüft das es sich nicht um einen Link von Yahoo handelt. Das macht man indem man prüft ob im Link eines dieser Teile enthalten ist:


yahoo
ysearchblog
search/cache
overture

4.) Realisierung
Webbrowser navigiert immer auf die URL wo durch eine Schleife immer die zu (Seite*10) + 1 für b= eingesetzt wird.

BeispielCode:


Do While NichtAlleSeitenAusgelesen

webbrowser1.navigate(URLmitVariablenEingesetzt)

quelltext = WebbrowserQuelltext

#Überprüfen ob Links enthalten sind
Loop
Überprüfen des Links:


Do While NochLinkImQuelltextVorhanden

link = (Teil zwischen den beiden Mustern)

quelltext = quelltext - link

if Link beinhaltet Yahoo Link Muster = false then

Link Gefunden

End if

Loop
Seitenende Herausfinden:


If not LEtzteSeiteLinksZusammen = JetztigeSeiteLinks

else

'Ende Erreicht

End IF


Richtige Code:


Vorab:
Textbox1 erstellen
Webbrowser1 erstellen
Button1 erstellen


Public Class Form1
Public complete As Boolean
Dim EndevonSeiten As Boolean = True
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Sub SekundenPause(ByVal Sekunden As String)
'Time Stamp berechnen zur jetztigen Zeit + Anzahl der Sekunden die er warten soll
Dim nextsec As Integer = gettimestamp() + Sekunden
'Solang die Uhrzeit noch nicht bei nextsec ist
Do While Not gettimestamp() >= nextsec
'Lass die Form nicht Sterben!
Application.DoEvents()
Loop
End Sub
Function gettimestamp()

Dim date1 As DateTime = New DateTime(1970, 1, 1)
Dim date2 As DateTime = DateTime.Now
Dim ts As TimeSpan = New TimeSpan(date2.Ticks - date1.Ticks)
Return (Convert.ToInt32(ts.TotalSeconds))
End Function
Sub losgehts()
'GESCHRIEBEN FÜR Die Free-Hack.com Community ;)

'Probleme beim Script:
'Man kann seine InternetSpeed noch nicht voll ausnutzen
'Benötigt relativ viel Rechenleistung
'Spuckt manchmal noch Fehler ;)

'Verbesserungen:
'Den Standart Wert von 10 Ergebnissen pro Seite erhöhen

'Deaktivieren der blöden Javascript Meldungen
WebBrowser1.ScriptErrorsSuppressed = True
Dim SeitenArray(1000) As String

Dim Momentane_Seite As Integer = 0
'Erstellen des WebClients()

'Euer Dork oder was auch immer
Dim Suchbegriff As String = suche.Text

'Wird auf True gesetzt sobald sich die Ergebnisse wiederholen
' = Parsvorgang beendet
EndeVonSeiten = False

'Die Ergebnisse der letzten Seite sind hier gespeichert
Dim LetzteGefunden As String = ""
Do While EndevonSeiten = False

'SeitenInhalt der Aktuellen Seite wird ausgelesen; Suchbegriff und Seite in Url einsetzen
'Momentane Seite * 10, da Yahoo die nächste Seite ab Suchtrefferanzahl auflistet und nicht nach Seite

WebBrowser1.Navigate("http://search.yahoo.com/search?p=" & Suchbegriff & "&b=" & (Momentane_Seite * 10) + 1)


'Warten bis Webbrowser1 fertiggeladen ist
'Schönere Form der system.threading.thread.sleep
'Quelltext ist mind. 30k Zeichen lang
'Die restliche Länge wird in der Sekundenpause geladen
Do While WebBrowser1.DocumentText.Length < 15000
'Damit unsere Form nicht abkackt
Application.DoEvents()
Loop
'Der Webbrowser braucht noch kurz
SekundenPause(1)
'QuellText auslesen

Dim Quelltext As String = WebBrowser1.DocumentText


'Boolean der aktiviert ist solang ein Link noch im Code ist (schleife)
Dim temp As Boolean = True
'Anzahl der ValidLinks die gefunden wurden
Dim LinksGefunden As Integer = 0
'Schleife, solang Link vorhanden ist
Dim AlleLinksZusammen As String = ""
Do While temp = True

'Prüft ob noch ein Link im restlichen Quelltext vorhanden ist
'Eigentlich Optional, da davor schon 10 Links gefunden wurden
If Quelltext.Contains("**http%3a//") = True Then
'Vom QuellText wird Der teil bis zum Link rausgelöscht,
'Damit beim Nächsten Schleifenvorgang nicht wieder der gleiche Link kommt
Quelltext = Quelltext.Remove(0, Split(Quelltext, "**http%3a//")(0).Length + 11)
'Hier wird der fertige Link in der Variablen gespeichert
'Link = **http%3a//##LINK##" <- Deswegen wird nach """" = " gesplittet
'und der Teil Vor dem " (split (blabla)(0))
Dim link As String = Split(Quelltext, """")(0)
'Begriffe die in den Links nicht vorkommen dürfen
'Da sie von Yahoo sind
'Hätte man auch schön mit Array und Schleife machen können ;)
If link.Contains("overture") = False Then
'-..-
If link.Contains("ysearchblog") = False Then
' -..-
If link.Contains("yahoo") = False Then
' -..-
If link.Contains("search/cache") = False Then
'Falls ein richtiger Link gefunden wird
LinksGefunden += 1
'Wird Später benötigt
AlleLinksZusammen &= link & vbCrLf

'Speichern noch im Seiten Array (Unnötige Klammen setzen macht Spaß ;))
'Der SeitenArray ist Optional ;)
SeitenArray((Momentane_Seite * 10) + LinksGefunden) = link
'Sobald 10 richtige Links gefunden wurden, Schleife beenden, da Yahoo ja nur 10
'Suchtreffer standartmäßig anzeigt
If LinksGefunden = 10 Then
Überprüfen:
'Überprüfen ob sich die Seiten wiederholen : Letzte Seite überschritten

If LetzteGefunden = AlleLinksZusammen Then
AllesGefunden:
'Vorgang fertig: Letzte Seite erreicht
If Momentane_Seite = 0 Then
MsgBox("Vorgang Abgeschlossen : Keine Ergebnisse gefunden")
Else
MsgBox("Vorgang Abgeschlossen : " & (Momentane_Seite - 1) & " Seiten gefunden.")
End If
GoTo SatzmitX
Else
'Link in die Textbox eintragen
TextBox1.Text &= vbCrLf & AlleLinksZusammen
LetzteGefunden = AlleLinksZusammen
End If
'Zur Sprungmarke Suche auf der Seite Vorbei
GoTo AlleLinksGefunden
End If
End If
End If
End If
End If
Else

'Gefundene müssen noch Überprüft werden, ob es sich dabei um die letzte Seite handelt
GoTo Überprüfen
AlleLinksGefunden:
'Schleife beendet
temp = False
End If

Loop
'Auf zur nächsten Seite
Momentane_Seite += 1

Loop






SatzmitX:







End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not EndevonSeiten = False Then
'Komplizierter Vorgang(Verstehen nur die Besten)
MsgBox("Programmiert für Free-Hack.com by N4umb3rs1NName")

losgehts()

Else
EndevonSeiten = True
End If

End Sub
End Class


Source zum Download

Download Source

Download Compilierte Exe