Dosyalardan Veritabanı Çıkarma Yöntemi Arıyorum
-
Hocalar bişeye ihtiyacım var. bunun için bir algoritma bilen yada önceden kafa yoran varsa beni ağır kasıştan kurtarır.
Bilirsiniz bir siteden data çekmek için önce tüm sayfaları alır sonra onu database e dizen kod yada script yazarız.
Şimdi örneğin bir sitenin bütün sayfalarını indirip 1.htm 2.htm 3.htm diye bir klasörde topladık
dosyaların içerikleri sırasıyla şunlar
<html><title>üye: hasan</title><body><b>isim:</b>hasan<br><b>soyad:</b>husein<br>yaş: 30<br></body></html>
<html><title>üye:osman </title><body><b>isim:</b>osman <br><b>soyad:</b>remzi<br>yaş: 32<br></body></html>
<html><title>üye:husein </title><body><b>isim:</b>husein <br><b>soyad:</b>rıza<br>yaş: 50<br></body></html>
<html><title>üye:ali </title><body><b>isim:</b>ali <br><b>soyad:</b>haydar<br>yaş: 30<br></body></html>Almak istediğim çıktı
<html><title>üye:%field1%</title><body><b>isim:</b>%field2%<br><b>soyad:</b>%field3%<br>yaş:%field4%<br></body></html>
yani 2 dosyayı karşılaştırıp farkların yerlerini bulmayı biliyorum fakat 100 dosyada aynısını yapıp bu işi template e nasıl dökerim.Webden çektiklerimi html değil template+database olarak toplamak benim amacım.
-
Göz kararı yapılabiliyorsa kodla da bir şekilde yapılabilmesi lazım.
-
Yanlış anlamadıysam bir veritabanı oluştur. önce varmı diye arat sonra ekle??
-
hmm göz kararı yapmak istedigin şeyi otomatik yapılmasını istiyorsun anladıgım kadarıyla. en basit yöntemle şöyle bişi olabilir.
seo da önemli özelliklerden biri biliyoruzki site içerisindeki kelime yoğunluğu ve bu tarz bir çok application var.
kelime yoğunluğu ölçen bir application yazarsak şablondaki sabit değerleri bulabiliriz.daha sonra geriye parse etmek kalıyor.
FCN tarafından 19/Ağu/13 11:54 tarihinde düzenlenmiştir
edit: ben mi yanlış anladım yoksa herkes mi yanlış anladı anlamadım :| -
html ile veriyi ayristiracak bir regex ve dosyalari dolasicak bir dongu yeterli olmayacakmi ? soruyumu anlamadim ?
-
YekteranBaymedir tarafından 19/Ağu/13 11:52 tarihinde düzenlenmiştir
RegEx her dilde ufak tefek değişikliklere uğruyor fakat kabaca şu şekilde:
<html><title>üye:([\w\W]*?)</title><body><b>isim:</b>([\w\W]*?)<br><b>soyad:</b>([\w\W]*?)<br>yaş:([0-9]*?)<br></body></html>
demek istediğini tam anlamadım ama herhalde regex işini görür.
http://msdn.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic4
-
Daft bunu yazdı
RegEx her dilde ufak tefek değişikliklere uğruyor fakat kabaca şu şekilde:
üye:([\w\W]*?)isim:([\w\W]*?)
soyad:([\w\W]*?)
yaş:([0-9]*?)demek istediğini tam anlamadım ama herhalde regex işini görür.
-
çözüm: htmlagility pack
detay geliyor:
Geldi:
foreach kısmında hangi klasörden dosyaları okutacaksan onu yaz hocam. htmlagilitypack ile de içeriği çek.
divlere filan çok girmediği için genelde string işlemleri halletti ama kesinlikle çalışır :)
HtmlWeb htmlWeb = new HtmlWeb(); HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); string http_reply = string.Empty; string imgy = string.Empty; string title = string.Empty; string ad=string.Empty; string soyad=string.Empty; string yas=string.Empty; string FilePath = ""; foreach (File f in FileCollection)// dosyaların file collectiona atılması laazım. { http_reply = DosyadabOku(FilePath); document.LoadHtml(http_reply); HtmlNode maindiv=document.DocumentNode.SelectSingleNode("//head/title"); title = maindiv.InnerText.ToString().Split(':')[1]; maindiv = document.DocumentNode.SelectSingleNode("//body"); if (maindiv != null) { string icerik = maindiv.InnerText; int i = 0; foreach (string c in icerik.Split(':')) { switch (i) { case 1: ad=c.ToString(); break; case 3: soyad = c.ToString(); break; case 5: yas= c.ToString(); break; } i++; } } }
manglerman tarafından 19/Ağu/13 12:04 tarihinde düzenlenmiştir -
Anlatamamışım,
Agility packi biliyorum, regexi de sıkça kullanıyorum. Fakat derdim buna regex yazabilmek değil.
Örneğin ben herhangi bir sitenin urlsini şöyle vericem.
tahribat.com/members.asp?id=[1..500]
o gidip dolaşacak htmlleri çekecek sonra buradan okuduğu bilgiyi database'e aktarabilmem için hangi bölümler statik hangi bölümler değişiyor bana onu göstersin istiyorum.Fakat tahribat.com yerine başka bir site/forum vsde aynı işlemi yaparsam da tıkır tıkır çalışsın istiyorum. bana regex yazdırmasın yani. çektiği dosyalarda hiç değişmeyen alanları bulsun yeterli. gerisini hallederim. (tabi her kelimenin boyutu değişeceği için bu alanlar aynı yerde durmuyor)
Dosyanın html olması da şart değil, herhangi bir txt dosyası olarak da düşünebilirsiniz.
statik alanları bulduktan sonra dbye geçirmesi çok kolay, her alanın hangi karakter aralığını kullandığına bakıp isim mi, sayı mı, email mi kolayca ayrıştırıp doğru alanlara aktarabilirim gerisinde problem yok.
HolyOne tarafından 19/Ağu/13 12:42 tarihinde düzenlenmiştir -
adamı ya kimse anlamamış yada bende mi sıkıntı var.
adam template generate ettirmeye çalışıyo eldeki dosyalardan parsing diil lan.
hacı değişken sayıda item olan sayfalarda atıyorum arama sayfasında sıkıntı yaşarsın böyle bi durumda. sayfa static bile olsa x değişkeni o sayfada boş geçilmiş olabilir, dolayısıyla kod patlayabilir felan baya sıkıntılı bi iş.
-
200'ün üzerinde bot yazmış biri olarak diyebilirimki neredeyse imkansız :)
araya bir <b> koysa araya bir br koysa.
yada sayfanın dinamik alanları arasında html kodları varsa herşey karışır.
her halukarda koda müdahele etmek zorunda kalırsın.
misal :
http://tahribat.com/members.asp?orderby=iddesc
bizim siteden çekmeye çalışsak bile her sayfada değişen yüzlerce alan var.
bunların hangisini çekeceğine kesinlikle bir insanın karar verip ona göre kodu yazması lazım.
çözüm olursa diye takipteyim tabi :)
