Sayfadaki Birden Fazla Tagın İçeriğini Almak [C#]
-
sharpshooterın C# ile bot yapımı konusun kodlar

yukarıdaki yapının biraz daha farklı olarak google arama sonuçlarını çekmeyi ele alırsak 1 sayfada 10 tane h3 tagında içerik oluyor.Bu içerikleri çekmek istedigimde sadece 1. içerik geliyor. foreachle falanda dizinin içine atmayı denedigimde 1. içerik diziyi dolduruyor.
bütün h3 tagındakileri dizinin içine nasıl atcam yardımcı olursanız sevinirim yarım saattir 4-5 satır kodu yazdım sildim yazdım sildim beceriksizligim üstümde :D
ek olarak kullandığınız güzel html parse sınıfı varmı kullanımı basit dökümantasyonu bol pratik bişi.
-
gelen.subsutring(gelen.indexof("")+1). gelen veriyi kırp sonra ilk h3lerin arasını al sonra yine kırp tekrar al istedğin yeri
-
UCANTENEKE bunu yazdı:
-----------------------------
gelen.subsutring(gelen.indexof("")+1). gelen veriyi kırp sonra ilk h3lerin arasını al sonra yine kırp tekrar al istedğin yeri
-----------------------------kırpmada problem yok gelen.substring(titlebaglangic,titlebitis); le gelen veri düzgün anlatamadm sanırım :|
<h3>icerik1 </h3>
<h3>icerik2 </h3>
<h3>icerik3 </h3>
<h3>icerik4 </h3>
4 tane h3 tagı varsa böyle sayfada ben cekince sadece icerik1 geliyor. -
up
-
aşağıdaki kod işini görür dostum.
static void Main(string[] args){string text = "<h3>icerik1</h3><h3>icerik2</h3><h3>icerik3</h3><h3>icerik4</h3>";//Başlangıç ve bitiş Html(XML) taglarını set ediyoruz..string startKey = "<h3>";string endKey = "</h3>";//Sayfa içerisindeki diğer içerikle karışmaması için h3 tagını absürd bir string ile replace ediyoruz..text = text.Replace(startKey, "#####");text = text.Replace(endKey, "#####");//Daha sonra yeni stringimiz #####icerik1#####icerik2##### ... formatına dönüşüyor ve bunu Split metoduyla diziye aktarıp kullanabiliyoruz..string[] textArray = text.Split(new string[] { "#####" }, StringSplitOptions.RemoveEmptyEntries);foreach (string t in textArray){Console.WriteLine(t);}} -
FCN şunu demek istedim
gelenhtml=icerik1
icerik2
icerik3
icerik4
; gelen.substring(titlebaglangic,titlebitis); //üsttekiyle ilk ceriği aldın sonra
gelenhtml=gelenhtml.substring(gelenhtml.indexof("")+1);
gelenhtml.substring(titlebaglangic,titlebitis);//ikinci sıradakinide böylece almış olursun edit operanın aq ben -
Bunlarla uğraşma hiç.
http://stackoverflow.com/questions/542194/c-is-there-a-linq-to-html-or-some-other-good-net-html-manipulation-api
http://stackoverflow.com/questions/100358/looking-for-c-html-parser/624410#624410
-
müritler adamın kafasını karıştırmayın Linq yada parser a da gerek yok :)
üstte verdiğim kodla istediği gibi diziye aktarıp kullanabiliyor..
-
öncelikle ilgilendiğiniz için teşeekkürler
@1905 verdiğin örnek iyi güzle hoşta düzenli ifadeler için uygun benim her h3 tagı arasında 30 satır fakrlı kod var oyüzden mantık oalrak güzel ama bende uygulanabilirliği yok su anda
@spark onlarada bakmıştım teşekkürler ama oda çok komplike bir iş oluo onada gerek duydugumu snamıoru m
@teneke seni hala anlamadım :D öyle ,zaten her filtrelemede yine tüm veriden 1. yi alırsın
herneyse olayı hem regexle yaptım hem substringle. substringi şimdi sallıyorum regex kodunu yapıştırim
Regex r = new Regex("<h2><a title=\"(?<baslik>(.*?))\" href=\"(?<link>(.*?))\" rel=\"bookmark\">(?<baslik2>([a-z]|ı|ü|ğ|ş|ö|,|ç|{.}| )*)</a></h2>");
MatchCollection mc = r.Matches(htmlmetin);
foreach (Match m in mc)
{
string baslik2 = m.Groups["baslik"].Value.ToString();
string link2 = m.Groups["link"].Value.ToString();
listBox1.Items.Add(baslik2);
listBox2.Items.Add(link2);
}bu şekilde istediğim veriyi yine düzgünce çektim ama foreach döngüsünde olmasına ragmen sayfadaki sadece 1. sıradaki yukarıda veridigm formattakiler gelio
aynı formatta diger veriler gelmiyor kafayı yicem :D
-
http://www.devcomponents.com/htmldoc/
şunu kullanıp html sayfayı xml dom a çevir
sonra linq to xml le temizce hallet şunu ya :=
edit : şu posta bakarmısın http://stackoverflow.com/questions/100358/looking-for-c-html-parser/624410#624410 // adamın burada yaptığını yap aynen
edit : http://omegacoder.com/?p=512
