Excel İle Veri Çekememe
-
Merhaba arkadaşlar.
Bir web sitesinden veri çekmem gerekiyor tek tek girip oradaki verileri almaya çalıştım ilk denemem de çok uzun sürdü bütün gün baktım kolay yolu var mı youtube'da bir video da izledim gayet güzel anlatmıştı video'yu çeken kişi.
Lakin şöyle bir problem yaşıyorum
Function tel_no_al(Bolge As Range)
On Error Resume Next
Dim dizi() As String
Dim hucre As Range
Dim adet As Integer
adet = 0
For Each hucre In Bolge
If hucre.Value Like "*2*" Then
adet = adet + 1
ReDim Preserve dizi(1 To adet)
dizi(adet) = hucre.Value
End If
Next hucre
tel_no_al = dizi(1)
For i = 2 To UBound(dizi)
tel_no_al = tel_no_al & " ; " & dizi(i)
Next i
End Function
If hucre.Value Like "*2*" Then
Yazan yere ikinci bir parametre eklemek istiyorum o da "." nokta. Yani hem 2'yi bulsun hemde noktayı bulsun istiyorum. Bunu ekleyemesem bile amacım Excel sayfasında 123. ve 133. satırlarda ki verileri almak. Aslında sadece 123. ve 133. satırları da alsam olur ama bu konuda ki tek bilgim hiçbirşey bilmediğim kesinlikle yazılım ile ilgili tek bir bilgim yok sadece ben o verileri çekmek istiyorum bu konu ile de ilgili bir bilgim olmayınca bu kadar oldu. Belki olayı zorlaştırıyorumdur aslında onu da bilmiyorum.
Bu konuda yardımcı olabilirseniz sevinirim.
Not: Veri çekmek istediğim site halka açık bir site sadece oradaki adres ve telefon numaralarını almak istiyorum olay bu.
-
hocam excel olmak zorunda değilse google sheet ile yapmaya çalışmanı öneririm
hem dili daha kolay hem de google sunucularında çalışıyor, ayarlıyosun belli saatlerde çalışıyo vs gibig üzellikleri var.
-
Sorunun cevabı; örneğin içinde 5 geçenleride aratacaksın, if cümlesini aşağıdaki gibi değiştir.
If hucre.Value Like "*2*" And hucre.Value Like "*5*" Then
Fakat zor bir yoldan yapıyorsun. Buna arguman ekleyerek, kod içine sayı yazmak yerine formülde sayı değerini belirterek yapabilirsin. ör:/ =tel_no_al(A2;2;5) gibi
Yazılımcı değilim demişsin ama bu tür web sayfasından doğrudan veri çekmek için en kolay ve hızlı yolu; Python + BeautifulSoup modülü. Başlamak için güzel ve kolay.
_____________________________________________________________________________________________________________________
Edit : vbs görünce duramadım, anılarım depreşti. Al modifiye edilmiş hali, (koda dokunmadan doğrudan formul içinde arayacağın değeri belirtebilirsin)
A2:B29 matrixde sadece 2 olanları aramak için =TelNoAl(A2:B29;2)
A2:B29 matrixde 2 ve 5 olanları aramak için =TelNoAl(A2:B29;2;5)
A:B matrixde 2 ve . olanlar =TelNoAl(A:B;2;".")Function TelNoAl(Bolge As Range, arg1 As String, Optional ByRef arg2 As Variant) Dim dizi() As String Dim hucre As Range Dim adet As Integer adet = 0 For Each hucre In Bolge If IsMissing(arg2) = False Then If InStr(hucre.Value, arg1) > 0 And InStr(hucre.Value, arg2) > 0 Then adet = adet + 1 ReDim Preserve dizi(1 To adet) dizi(adet) = hucre.Value End If Else If InStr(hucre.Value, arg1) > 0 Then adet = adet + 1 ReDim Preserve dizi(1 To adet) dizi(adet) = hucre.Value End If End If Next hucre TelNoAl = dizi(1) For i = 2 To UBound(dizi) TelNoAl = TelNoAl & " ; " & dizi(i) Next i End Function
-
Hocam yardımın için öncelikle teşekkür ederim
Fakat bendeki kodun içine bunu yerleştirdiğim zaman
If hucre.Value Like "*2*" And hucre.Value Like "*5*" Then
Bu kod ile arıyorum A133'de 2 değerini al dediğimde
=tel_no_al(A133;2)
olmuyor.
Tek değer tanımladığım zaman tek sütunda istediğimi buluyorum ama 2 değer tanımlayıp 2 sütunda aradığım zaman sonucu alamıyorum.
Ben istiyorum ki;
If hucre.Value Like "*2*" And hucre.Value Like "*:*" Then
123. sütunda içinde ":" işareti olanı 133. sütunda 2 ile başlayan değeri bana versin
ABC GEMİ ACENTELİĞİ NALBURİYE İNŞAAT MAKİNA MÜHENDİSLİK SANAYİ VE TİCARET LİMİTED ŞİRKETİ KOZLUK KAYSERİ NO:NO: 7/A İZMİT/KOCAELİ Semt İlçe İZMİT İl KOCAELİ Posta Kodu Faks 262 3314511 Telefon 262 3314510 En üstteki satır 123 en alttaki de 133
Senin yazdığın kod ile de denedim
=ADRESAL(A123:A133;2;":")
Olarak yazıyorum bir sonuç çıkmıyor,
lanet olsun sadece 2 olanı bul diyorum
=ADRESAL(A:B;2)
0 Değerini veriyor.
Büyük ihtimal ile ben yapamıyorum. Hepsini siktiret şununla yap diyen varsa @yolbulucu gibi onlara da açığım. Nereden baksan belki 400 link var hepsine tek tek girip adres,şirket adı ve tel no almam her biri için bile 30 saniye olsa 200 dk yapar o da bana çok geldi birde sürtünmeleri hesaba katmazsak teorik olarak o da :)
-
Bu veri çekme işine bende çok meraklıyım ama tam anlamıyla bir çözüm bulmak zor en iyisi Python öğrenmek siteyi yszsrmsiin bir bakayim
-
evsiz bunu yazdı
Ben istiyorum ki;
If hucre.Value Like "*2*" And hucre.Value Like "*:*" Then
123. sütunda içinde ":" işareti olanı 133. sütunda 2 ile başlayan değeri bana versin
Hocam anladımda, bu kodla olmaz o iş, mantığı ters;
If hucre.Value Like "*2*" And hucre.Value Like "*:*" Then -> Bunun anlamı ; Eğer hücre içerisinde 2 VE ":" değeri varsa getir. Yani her ikiside olması lazım. Senin örnekte hücrelerin hiçbirinde ":" değeri yok, ondan getirmez.
If hucre.Value Like "*2*" Or hucre.Value Like "*:*" Then -> Bunun anlamı ; Eğer hücre içerisinde 2 VEYA ":" değeri varsa getir. Değerlerden bir tanesi olması yeterli.
Bu kodlarda satır ve sutun numaraları dikkate almaz, sadece hücre (cell) içerisinde arama yapar. Yani 123. yazınca, 123 satır değil, hücre içinde 123. değerini arar.
Bende çalışıyor, bu ilk örnekte A ve B klonların hücreleri içinde 2 değeri olanları getir;
A123 -A133 hücreleri içerisinde 2 ve 0 olanları getir. (her ikiside olmak zorunda, yoksa hata döner)
Ama dediğim gibi senin işini bunlar çözmez, en azından aramalar için regex kullanmak gerekecek ki regex işleri çok kolaylaştırır. Bu şekilde zor senin iş.
cukurova tarafından 28/Mar/21 21:56 tarihinde düzenlenmiştir -
foksiyonla diziyle hiç uğraşma hacı.
excelde bir sütuna verileri çekeceğin linkleri yaz,
createObject ile internet explorer tarayıcısını oluştur,
querySelectorAll ile hangi satırlar lazımsa alıp hücrelere yazdırabilirsin.
web scraping ile ilgili excel örnekleri nette var sen bir bak olmadı burdan tekrar yardımlaşırız hacı