• 15-05-2022, 12:10:24
    #1
    Selamlar,

    Arkadaşlar konuyu nereye açacağımı tam olarak bilmediğimden dolayı buraya açtım. Yanlış bir kategori seçtiysem konu taşınabilir. Kusura bakmayın bu yüzden.

    Yazılım bilgim yok, üyelikle giriş yaptığım bir sitede ürünler ve fiyatlar var. Buradaki fiyatlar sürekli değişiyor. Her ürün farklı sayfada. 1000 civarı ürün var, her ürünün tek tek 1000 küsür linke girerek sürekli fiyatı değişti mi değişmedi mi diye kontrol etmek, değiştiyse excele o veriyi çekmek elbette sürdürülebilir bir şey değil. Bir defa yapmak bile işkence oldu. Bu işlemi yazılımsal olarak nasıl yapabilirim, yardımcı olabilecek, yol gösterebilecek kimse var mıdır? Hangi uygulama,modül veya yolu izleyerek yapabilirim? Öğrenip ihtiyacıma göre şekillendirmek istiyorum.

    Sitedeki link yapıları;
    abc.com/product/1000
    abc.com/product/1001
    abc.com/product/3594

    gibi gibi...

    Öncelikle tüm linkleri toplamam gerekiyor sanırım, (bunu toplu yapmanın bir yolu var mı ?)
    daha sonra istediğim alanları excel veya başka bir uygulama üzerine siteden çekip istediğim formata göre yazdırmasını isteyeceğim verileri.

    Mümkün mü böyle bir şey ?

    Teşekkürler.
  • 15-05-2022, 12:22:36
    #2
    Verileri botla çekebilirsiniz. Adres sonundaki rakamları for ... next gibi bir döngü ile otomatik olarak değiştirebilirsiniz. Yahut fiyatlar dolar üzerinden sürekli değişiyorsa veritabanına fiyatları dolar olarak eklersiniz, dolar kuruna göre TL olarak görüntületip işlem yaptırabilirsiniz.
  • 15-05-2022, 12:27:23
    #3
    Turkic adlı üyeden alıntı: mesajı görüntüle
    Verileri botla çekebilirsiniz. Adres sonundaki rakamları for ... next gibi bir döngü ile otomatik olarak değiştirebilirsiniz. Yahut fiyatlar dolar üzerinden sürekli değişiyorsa veritabanına fiyatları dolar olarak eklersiniz, dolar kuruna göre TL olarak görüntületip işlem yaptırabilirsiniz.
    Cevap için teşekkürler, peki bunu hangi yazılım veya yolu izleyerek yapabilirim? Hiç yazılım bilgim yok.
  • 15-05-2022, 12:40:27
    #4
    Yazılım bilginiz olmadan yapamazsınız. Pm üzerinden yazarsanız yardımcı olayım
  • 15-05-2022, 12:41:09
    #5
    Autoit ile bot yazabilirsiniz ama hiç programlama bilmeden olmaz. Ara sıra forumda Autoit programı kodu paylaşıyorum, sizin bu anlattığınıza benzer bir kod yazıp gönderebilirim. Siz kendi veri çekmeye çalıştığınız siteye göre kodu düzenleyip veri çekmeyi deneyebilirsiniz.
  • 15-05-2022, 16:20:40
    #6
    Botun nasıl veri okuyup dosyaya yazdığını basitçe gösteren örnek:


    #include <IE.au3>
    #include <GUIConstants.au3>
    #include <String.au3>
    ;Kayıt eklenecek dosya açılıyor
    $dosya=FileOpen("fiyatlar.txt", 128+1)
    ;Program penceresi oluşturuluyor
    $pencere=GUICreate("Fiyat çekme botu", 1000, 800)
    GUISetBkColor(0x19A3BC)
    ;Internet Explorer nesnesi gömülüyor
    $oIE = _IECreateEmbedded()
    GUICtrlCreateObj($oIE, 0, 0, 1000, 800)
    ;Pencere gösteriliyor:
    GUISetState(@SW_SHOW, $pencere)
    ;Verinin çekileceği sayfaya giriliyor. Sayfanın adresi örnekte * karakteri ile sansürlenmiştir.
    _IENavigate($oIE, "https://www.****.com.tr/***", 1)
    ; sayfaya girdikten sonra 1 saniye bekleniyor. Sleep(1000) yerine Sleep(5000) yazılırsa 5 saniye beklenir.
    Sleep(1000)
    ;Sayfanın kaynağı değişkene aktarılıyor
    Local $sHTML = _IEDocReadHTML($oIE)
    ;Kaynak koddaki satırlar tek satıra indiriliyor
    $sHTML=StringReplace($sHTML, @CRLF, " ")
    $sHTML=StringReplace($sHTML, @CR, " ")
    $sHTML=StringReplace($sHTML, @LF, " ")
    ;Fiyat bilgisinin bulunduğu etiketten bilgi alınıyor. Fiyat bilgisi sayfada tek olduğu için veri $fiyat[0] şeklinde kullanılabilir.
    $fiyat=_StringBetween($sHTML, '<DIV class=product-detail__sale-price>', '</DIV>')
    ;Alınan fiyat dosyaya yazılıyor
    FileWriteLine($dosya, $fiyat[0])
    While 1
    $msg=GuiGetMsg()
    Select
    Case $msg=$GUI_EVENT_CLOSE
    ;Dosya kapatılıyor
    FileClose($dosya)
    ;Programdan çıkılıyor
    Exit
    EndSelect
    Wend
    Kodda $fiyat=_StringBetween($sHTML, '<DIV class=product-detail__sale-price>', '</DIV>') şeklinde fiyat bilgisi alınıyor. Sayfanın kaynak kodunda fiyat bilgisinin hangi etiketler arasında bulunduğunu fiyatın yazılı olduğu yerden "denetle"ye girerek görebiliyoruz:


    "Denetle"den girdiğimiz zaman tarayıcı kodda değişiklik yaparak görüntüleyebiliyor. Burada <div class="product-detail__sale-price"> şeklinde görüntülenen etiketi aynen kullandığımızda fiyat bilgisi alınamamaktadır. Bu bakımdan çift tırnaklar varken netice alamazsanız çift tırnakları silerek tekrar deneyebilirsiniz. Yine hata alırsanız Autoit _IEDocReadHTML ile alınan kodu görmek için şu kodu çalıştırabilirsiniz:
    #include <IE.au3>
    #include <GUIConstants.au3>
    #include <String.au3>
    
    ;Program penceresi oluşturuluyor
    $pencere=GUICreate("Kaynağı gör", 1000, 800)
    GUISetBkColor(0x19A3BC)
    ;Internet Explorer nesnesi gömülüyor
    $oIE = _IECreateEmbedded()
    GUICtrlCreateObj($oIE, 0, 0, 1000, 800)
    ;Pencere gösteriliyor:
    GUISetState(@SW_SHOW, $pencere)
    ;Verinin çekileceği sayfaya giriliyor.
    _IENavigate($oIE, "https://www.*******.com/product/show/5555", 1)
    ; sayfaya girdikten sonra 1 saniye bekleniyor. Sleep(1000) yerine Sleep(5000) yazılırsa 5 saniye beklenir.
    Sleep(1000)
    ;Sayfanın kaynağı değişkene aktarılıyor
    Local $sHTML = _IEDocReadHTML($oIE)
    ;Kaynak koddaki satırlar tek satıra indiriliyor
    $sHTML=StringReplace($sHTML, @CRLF, " ")
    $sHTML=StringReplace($sHTML, @CR, " ")
    $sHTML=StringReplace($sHTML, @LF, " ")
    ;Kaynak kod panoya kopyalanıyor
    ClipPut($sHTML)
    ;Not defteri çalıştırılıyor
    Run("notepad.exe")
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
    ;Panodaki kod not defterine yapıştırılıyor
    Send("^v")
    While 1
    $msg=GuiGetMsg()
    Select
    Case $msg=$GUI_EVENT_CLOSE
    ;Programdan çıkılıyor
    Exit
    EndSelect
    Wend
    Bunu çalıştırdığınızda kaynak kod not defterine yapıştırılıyor, etiketleri not defterinden alırsanız hatasız çalışabilir.

    Programı çalıştırdıktan sonra elde edilen sonuç:

    Sayfadan birden fazla verinin alınması:
    ;Ürün kodu bilgisinin bulunduğu etiketten bilgi alınıyor. Ürün kodu bilgisi sayfada tek olduğu için veri $marka[0] şeklinde kullanılabilir.
    $urunkodu=_StringBetween($sHTML, '<P class=product-detail__sku>Ürün Kodu: ', '</P>')
    ;Marka bilgisinin bulunduğu etiketten bilgi alınıyor. Marka bilgisi sayfada tek olduğu için veri $marka[0] şeklinde kullanılabilir.
    $marka=_StringBetween($sHTML, '<A class=product-detail__brand href="#">', '</A>')
    ;Fiyat bilgisinin bulunduğu etiketten bilgi alınıyor. Fiyat bilgisi sayfada tek olduğu için veri $fiyat[0] şeklinde kullanılabilir.
    $fiyat=_StringBetween($sHTML, '<DIV class=product-detail__sale-price>', '</DIV>')
    ;Alınan bilgiler sütunlar hâlinde dosyaya yazılıyor
    FileWriteLine($dosya, $urunkodu[0] & @TAB & $marka[0] & @TAB & $fiyat[0])
    Programı çalıştırdıktan sonra elde edilen sonuç ve excele yapıştırılmış hâli:

    Sonu farklı rakamlarla biten adresleri dolaşan ve birden fazla barkod kodunu tek sütunda toplayan kod:
    
    #include <IE.au3>
    #include <GUIConstants.au3>
    #include <String.au3>
    #include <Array.au3>
    ;Kayıt eklenecek dosya açılıyor
    $dosya=FileOpen("fiyatlar.txt", 128+1)
    ;Program penceresi oluşturuluyor
    $pencere=GUICreate("Fiyat çekme botu", 1000, 800)
    GUISetBkColor(0x19A3BC)
    ;Internet Explorer nesnesi gömülüyor
    $oIE = _IECreateEmbedded()
    GUICtrlCreateObj($oIE, 0, 0, 1000, 800)
    ;Pencere gösteriliyor:
    GUISetState(@SW_SHOW, $pencere)
    
    For $ID=1000 TO 9999
    ;aşağıda "http://www.******.com/product/show/" yerine veri çekmeye çalıştığınız adresi yazın.
    ;$ID bu adresin sonuna 1000 ile 9999 arası rakamların otomatik olarak değişmesi içindir.
    ;Farklı rakam aralıkları için yukarıdaki For $ID=1000 TO 9999 satırındaki rakamlarla oynayabilirsiniz.
    _IENavigate($oIE, "http://www.******.com/product/show/" & $ID, 1)
    
    ; sayfaya girdikten sonra 1 saniye bekleniyor. Sleep(1000) yerine Sleep(5000) yazılırsa 5 saniye beklenir.
    Sleep(1000)
    ;Sayfanın kaynağı değişkene aktarılıyor
    Local $sHTML = _IEDocReadHTML($oIE)
    ;Kaynak koddaki satırlar tek satıra indiriliyor
    $sHTML=StringReplace($sHTML, @CRLF, " ")
    $sHTML=StringReplace($sHTML, @CR, " ")
    $sHTML=StringReplace($sHTML, @LF, " ")
    
    ;Ürün kodu bilgisinin bulunduğu etiketten bilgi alınıyor. Ürün kodu bilgisi sayfada tek olduğu için veri $marka[0] şeklinde kullanılabilir.
    $urunkodu=_StringBetween($sHTML, '<P class=product-detail__sku>Ürün Kodu: ', '</P>')
    ;Marka bilgisinin bulunduğu etiketten bilgi alınıyor. Marka bilgisi sayfada tek olduğu için veri $marka[0] şeklinde kullanılabilir.
    $marka=_StringBetween($sHTML, '<A class=product-detail__brand href="#">', '</A>')
    ;Fiyat bilgisinin bulunduğu etiketten bilgi alınıyor. Fiyat bilgisi sayfada tek olduğu için veri $fiyat[0] şeklinde kullanılabilir.
    $fiyat=_StringBetween($sHTML, '<DIV class=product-detail__sale-price>', '</DIV>')
    $barkod=_StringBetween($sHTML, '<td class=ng-binding>', '</td>')
    ;Barkodlar tek değişkende toplanıyor
    if UBound($barkod)>0 Then
    $barkodlar=_ArrayToString($barkod, "\r\n")
    Else
    $barkodlar=""
    Endif
    ;Sayfada aranan bilgiler bulunamazsa programın hata vermemesi için yapılan kontrol:
    if UBound($urunkodu)>0 AND UBound($marka)>0 AND UBound($fiyat)>0 AND $barkodlar<>"" Then
    ;Alınan bilgiler sütunlar hâlinde dosyaya yazılıyor
    FileWriteLine($dosya, $urunkodu[0] & @TAB & $marka[0] & @TAB & $fiyat[0] & @TAB & $barkodlar)
    EndIf
    Next
    
    While 1
    $msg=GuiGetMsg()
    Select
    Case $msg=$GUI_EVENT_CLOSE
    ;Dosya kapatılıyor
    FileClose($dosya)
    ;Programdan çıkılıyor
    Exit
    EndSelect
    Wend