C# htmlagilitypack strong gelmesini nasıl iptal edilir?

AhmetBirkan

Hectopat
Katılım
24 Temmuz 2020
Mesajlar
782
Çözümler
2
Merhaba, sorunum şu ben html dosyamın içindeki veriyi alıp listeye aktarıyorum. Şimdi sorun şu ol etiketi içindeki li etiketinin içindeki p etiketinin içinde 2 farklı kelime var. Biri strong etiketi içerisinde yazıyor bu ingilizce kelime biri ise direk yazılı yani ekstra strong etiketi kullanılmıyor. Ben HtmlAgilityPack ile strong etiketi içindeki kelimeyi aldım fakat strong olmayan kelimeyi alınca strong etiketi içindeki ingilizce kelimede geliyor. Ben nasıl strong'un gelmesini iptal ederim?

1611919949689.png

Bakın üstte resimde sol tarafta "accountant" yazıyor bunu alırken sorun yok fakat sağ tarafaki "muhasebeci" kelimesini alırken "accountant" kelimeside geliyor. Bunları nasıl ayırırım?

accountant'ı aldığım kod:
C#:
List<string> englishKeywords = new List<string>();

            HtmlAgilityPack.HtmlWeb htmlWeb = new HtmlAgilityPack.HtmlWeb();
            HtmlAgilityPack.HtmlDocument htmlDocument = htmlWeb.Load(@"dosyaKonumu");
            foreach (HtmlAgilityPack.HtmlNode selectNode in htmlDocument.DocumentNode.SelectNodes("//ol//li//p//strong"))
            {
                englishKeywords.Add(selectNode.InnerText.ToString());
            }

            return englishKeywords;

Üstte verdiğim c# kodunun aynısını strong olmayan kelimeyi almak içinde kullanıyorum şu şekilde: //ol//li//p fakat strong'u dahil ediyor. Benim strong'u devre dışı bırakmam gerek nasıl yaparım?

[CODE lang="html" title="HTML dosyamın içeriği"]
<ol><li><p><strong>accountant:</strong> muhasebeci</p></li>
<li><p><strong>afraid:</strong> korkmuş</p></li>
<li><p><strong>age:</strong> yaş</p></li>
<li><p><strong>airplane:</strong> uçak</p></li>
<li><p><strong>alone:</strong> yalnız</p></li>
<li><p><strong>angry:</strong> kızgın</p></li>
<li><p><strong>animal:</strong> hayvan</p></li>
<li><p><strong>answer:</strong> cevap, cevap vermek</p></li>
[/CODE]

@Bedirhan SAMSA @Linuxginar @The Anorak Hocalarım bakarsanız sevinirim :).
 
Hocam doğru anlamışsınız. Ben strong'un dışındaki alanı almak istiyorum ama alamadım maalesef. Split ile çektiğim veriyi bölüp dictionary'e atıp işledim. Teşekkür ediyorum ama yardımlarınız için.
C#:
string strong = "afraid";
string p = "<strong>afraid:</strong> korkmuş";
string outOfStrong = p.Replace("<strong>", "").Replace("</strong>", "").Replace(strong, "").Replace(":","").Trim();

3. satırdaki kodu for döngüsü ile her satır için uygulayabilirsiniz.
Eğer genel kural bu ise sorun çıkmadan ayırabiliyor olması lazım.
 
C#:
string strong = "afraid";
string p = "<strong>afraid:</strong> korkmuş";
string outOfStrong = p.Replace("<strong>", "").Replace("</strong>", "").Replace(strong, "").Replace(":","").Trim();

3. satırdaki kodu for döngüsü ile her satır için uygulayabilirsiniz.
Eğer genel kural bu ise sorun çıkmadan ayırabiliyor olması lazım.
Hocam zaten <strong>ifade</strong> şeklinde gelmiyor. afraid: korkmuş şeklinde geliyor. Benim istediğim agility pack ile çekerken doğrudan ayrı ayrı çekemem mi diye sormaktı aslında.
 
Hocam zaten <strong>ifade</strong> şeklinde gelmiyor. afraid: korkmuş şeklinde geliyor. Benim istediğim agility pack ile çekerken doğrudan ayrı ayrı çekemem mi diye sormaktı aslında.
Eğer bu şekilde geliyorsa çok daha kolay.
C#:
string outOfStrong = p.Split(':')[1].Trim();

HTML tagları arasında <template> isimli bir tag mevcut. Kodda yer alır ancak render esnasında DOM'a eklenmez. Eğer <strong>foo:</strong> <template>bar<template/> şekline getirirseniz p içerisindeki template diyerek hiç uğraşmadan çekebilmeniz gerekiyor. (Template kaynak kodda bulunur ancak browserda renderlanmış sitede görünmez. Bu yüzden veri çekme botu için uygun değil. Ancak HTML dosya parse için uygun.)

Eğer veriler size ait değilse filtreleme yapmak çok daha kolay.
 
Son düzenleme:
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı