حل شده

مشکل در Parse کردن سایت

بازدید45.5kپست ها1آخرین فعالیت9 سال پیش
0
0

سلام وقت بخیر

من از پک HtmlAgility برای Parse کردن سایت ها استفاده میکنم که توی دات نت های مختلف و برنامه نویسی مترو قابل استفاده هست.

        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(richTextBox3.Text);
        HtmlAgilityPack.HtmlNode node = doc.DocumentNode.SelectNodes("//body//section")[1];
        string html = node.InnerHtml.Replace("\"","'");
        string stt = "<div class='pos-summary'>";
        html = html.Substring(html.IndexOf(stt) + stt.Length);
        html = stt +html.Substring(0, html.LastIndexOf("</div>") + 0);

        HtmlAgilityPack.HtmlDocument doc2 = new HtmlAgilityPack.HtmlDocument();
        doc2.LoadHtml(html);

        HtmlAgilityPack.HtmlNodeCollection nodes = doc2.DocumentNode.SelectNodes("//a");
        string content = null;
        foreach (HtmlAgilityPack.HtmlNode item in nodes)
        {
            content += "Inner: " + item.InnerText + "\r\nAttribute: "  +item.GetAttributeValue("href", null) + "\r\n\r\n\r\n\r\n";
        }

من این کد رو برای گرفتن مقادیر سایتی در سی شارپ دسکتاپ استفاده کردم و کار هم داد اما چون توی توی محیط برنامه نویسی METro(ویندوز استور و ویندوزفون) 
فضای نامی System.Xml.XPath وجود نداره کد من توی این دو با مشکل برمیخوره و دو تابع SelectNodes و SelectSingleNode که از این کلاس استفاده میکنند اصلا وجود ندارن.
توی سایت های خارجی هم جستجو کردم گفتن تنها راهش استفاده از Linq هست. من زیاد با Linq کار نکردم واسه همین دقیق نمیدونم چیکار کنم.(توی Linq همدو تابع SelectNodes و SelectSingleNode  برای این مترو وجود نداره)
یک مثال توی سایت ها برای HtmlAgility پیدا کردم:

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);

var travelList = new List<HtmlNode>();
foreach (var matchingDiv in doc.DocumentNode.DescendantNodes().Where(n=>n.Name == "div" && n.Id == "myTrips"))
{
    travelList.AddRange(matchingDiv.DescendantNodes().Where(n=> n.Name == "li"));
}

ممنون

1 پاسخ

1

سلام برادر
به این سایت سری بزن احتمالا مشکل حل میشه

Selectsinglenode تو linq اینطور میشه:

HtmlNode parent = document.DocumentNode
                          .Descendants("ul")
                          .FirstOrDefault(o => o.GetAttributeValue("class", "") 
                                                   == "songs-list1")
HtmlNodeCollection x = parent.ChildNodes;

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.