Saturday, 28 February 2015

VB.NET :: Membuat Web Crawler Sederhana Dengan VB.Net


Web crawler adalah sebuah bot internet yang secara sistematis menelusuri World Wide Web, biasanya untuk tujuan pengindeksan web. Sebuah crawler web juga dapat disebut spider web atau pengindeks otomatis.

Mesin pencari web dan beberapa situs lain menggunakan web crawling atau spidering software untuk memperbarui konten web mereka atau indeks konten web lain. Web crawler dapat menyalin semua halaman yang mereka kunjungi untuk diproses kemudian oleh sebuah mesin pencari yang meng-indeks halaman web sehingga pengunjung web dapat mencari mereka jauh lebih cepat. Crawler dapat memvalidasi hyperlink dan kode HTML, web crawler juga dapat digunakan untuk Scraping web.

Design Web Crawler Sederhana.

Pada artikel ini kita akan membuat sebuah web crawler sederhana untuk dapat menunjukkan dasar - dasar cara kerja web crawler dalam melakukan peng-indeksan halaman web. Dalam contoh yang akan disertakan tidak akan membahas masalah pengelolaan index, penjadwalan serta multi threading dalam crawling, artikel ini hanya mencakup fungsi dasar crawling saja.

Arsitektur web crawler yang akan kita implementasikan saat ini adalah sebagai berikut :



Design UI.

Sebelum mulai ke level code, mari kita membuat interface untuk web crawler kita, buatlah Tampilan seperti terlihat pada gambar dibawah ini 



Berikut Daftar Control dan keterangannya :

Jenis KomponenNamaText
FormForm1Form1
ButtonButton1Button1
TextBoxTextBox1
ListBoxListBox1

Deklarasi.

Setelah selesai dengan design UI, mari kita mulai membuat codenya, bukalah code designer dari Form1, kemudian ikuti imports item dan deklarasi seperti pada contoh berikut :


Imports System.Net
Imports System.IO
Imports System.Text.RegularExpressions

Public Class Form1

  Dim LinkCollection As New Collection
  Dim Depth As Integer = 5
  Private Const Regex_Href_Code As String = "href\s*=\s*(?:""(?[^""]*)""|(?\S+))"

End Class

Pada code diatas terlihat sebuah variable bernama Depth dengan nilai 5, variable ini berguna untuk membatasi kedalaman penelusuran link, karena pada contoh ini tidak menggunakan konsep multithread, maka pembatasan kedalaman penelusuran perlu dilakukan untuk mencegah komputer mengalami overload.

Pada code diatas terlihat pula variable bernama Regex_Href_Code, variable ini berguna untuk menyaring konten halaman yang mempunyai kriteria tertentu yang dapat dianggap sebagai sebuah link (URL).

Selanjutnya kita akan mulai membuat fungsi untuk web crawler kedalam form1.

Method ProcessLinkCollection.

Method ini akan digunakan untuk melakukan proses terhadap link - link yang diekstrak dari sebuah halaman web, berikut code nya :


Private Sub ProcessLinkCollection()
    Depth = -1
    For Each item In LinkCollection
      LinkCollection.Remove(item)
      ReadPageContent(item, TextBox1.Text)
      Application.DoEvents()
    Next
  End Sub

Method ExtractURL.

Method ini digunakan untuk melakukan pemeriksaan terhadap conten web dan mengekstrak link - link yang terdapat pada halaman tersebut dan menyimpannya dalam sebuah object collection, berikut code nya :

Function ExtractURL(Content As String, URL As String) As Collection
    Dim UrlCollection As New Collection
    Dim BaseURI As New Uri(URL)
    Dim HrefRegex As New Regex(Regex_Href_Code, RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    Dim HrefMatch As Match = HrefRegex.Match(Content)
    Do While HrefMatch.Success = True
      Dim Link As String = HrefMatch.Groups(1).Value
      If Link.Substring(0, 1) <> "#" Then
        Dim Absolute As Boolean = False
        If Link.Length > 8 Then
          UrlCollection.Add(Link)
        End If
      End If
      HrefMatch = HrefMatch.NextMatch
    Loop
    Return UrlCollection
  End Function

Method ReadPageContent.

Method ini merupakan method utama yang berguna untuk melakukan web request dan membaca conten page serta menyimpan link - link yang terdapat pada halaman yang di-request, selanjutnya method ini akan menampilkan link - link yang cocok dengan kriteria pencarian, berikut codenya :

Sub ReadPageContent(URL As String, SearchedText As String)
    Dim BaseURI As New Uri(URL)
    Dim PageContent As String = String.Empty

    Try
      Dim PageRequest As HttpWebRequest = CType(WebRequest.Create(BaseURI), HttpWebRequest)
      Dim PageResponse As HttpWebResponse = PageRequest.GetResponse
      Dim PageReader As New StreamReader(PageResponse.GetResponseStream)

      PageContent = PageReader.ReadToEnd
      LinkCollection = ExtractURL(PageContent, URL)
      PageReader.Close()

      If PageContent.Contains(SearchedText) = True Then
        If Not ListBox1.Items.Contains(URL) Then ListBox1.Items.Add(URL)
        Application.DoEvents()
      End If

      For Each item In LinkCollection
        If Not ListBox1.Items.Contains(item) Then ListBox1.Items.Add(item)
        Application.DoEvents()
      Next

      If Depth > 0 Then
        ProcessLinkCollection()
      End If
    Catch ex As Exception

    End Try

  End Sub

Method Button1_Click.

Method ini adalah event triger untuk object button satu yang telah kita buat sebelumnya, berikut codenya :

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ReadPageContent("https://www.google.com/search?q=" & TextBox1.Text, TextBox1.Text)
End Sub

Contoh web crawler sederhana ini dapat anda kembangkan untuk memproses link dan proses lainnya yang anda butuhkan, semoga bermanfaat.

Source: surya-pradhana

No comments:

Post a Comment