DCSIMG
Working with Microsoft.mshtml in c# - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Working with Microsoft.mshtml in c#

 

ניתוח קוד html ב - #C באפליקציית Console Application

 
 
קבלתי משימה - נתנו לי כתובת דף אינטרנט המציג תוצאות חיפוש לפי פרמטרים, השאילתא מחזירה  כ - 86 דפים ובכל דף 10 תוצאות (סך הכול 860 תוצאות), מה שהייתי צריך לעשות זה:
1. לגלוש לאתר מקוד
2. לנתח את התוצאות
3. להוציא אותם לאקסל.
 
 לגלוש לאתר מקוד זה מאוד פשוט:
 

private string GetHtml(string url)

{

    WebClient client = new WebClient();

    string str = client.DownloadString(url);

    return str;

}

 
להוציא את התוצאות לאקסל, זה גם לא נורא (אני אראה את זה בפוסט עתידי)
 
הבעייה הייתה לנתח את התוצאות, אופצייה אחת היא לעשות מניפולציות על המחרוזת וזה די ברור שאני לא ממש רוצה לעשות את זה, האופצייה השנייה היא לעבוד עם Microsoft.mshtml שזה dll שאפשר לכתוב איתו (כמעט) דפדפן, למעשה הפקד web browser ב - win form משתמש מאחורי הקלעים עם ה - dll הזה,
 
נכתוב קוד כזה:
 
 

private HTMLDocumentClass GetDocument(string url)

{

    var docClass = new HTMLDocumentClass();

    IHTMLDocument2 iDoc = (IHTMLDocument2)docClass;

 

    object html = GetHtml(url);

    iDoc.write(html);

 

    return docClass;

}

 
כעת אפשר להתחיל לנתח את התוצאות, למשל אפשר לכתוב קוד כזה:
 

var doc = GetDocument(GetUrl(1));

var header = (HTMLHeaderElementClass)doc.getElementById("h1ElementId");

 

string hedaerText = header.innerText;

 
 
פורסם: Feb 01 2011, 11:35 AM by Shlomo | with 8 comment(s)
תגים:, ,

תוכן התגובה

Guy Burstein כתב/ה:

אפשרות נוספת היא להשתמש ב- Html Agility Pack :

htmlagilitypack.codeplex.com

כדי להפוך את ה- HTML ל- XML. אז ניתן להשתמש ב- LINQ to XML כדי לבצע שאילתות על ה- HTML בצורה קלה.

בהצלחה

גיא

# February 1, 2011 12:52 PM

Shlomo כתב/ה:

לא הכרתי - תודה

# February 1, 2011 1:48 PM

oz כתב/ה:

היי,

האם הדוגמה שנתת מתמודדת עם AJAX ושאר דרכים של מקודד האתר להגן על התוכן שלו?

אפשר גם להשתמש:

browser = new WebBrowser();

browser.Url = "http://www.ynet.co.il";

browser.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);

ובתוך האיוונט שנרשמנו אליו לבדוק

HtmlDocument doc = new HtmlDocument();

           if (browser.ReadyState == WebBrowserReadyState.Complete)

           {

               doc = browser.Document;

           }

# February 1, 2011 2:17 PM

Shahar Eldad כתב/ה:

תודה - מעניין :)

# February 2, 2011 9:22 AM

Avi Pinto כתב/ה:

אם זו משימה חד פעמית(או לעתים נדירות),

אתה יכול לעשות את הכל בצד לקוח

ב console של firebug (הוא פשוט הכי נוח לעומת כרום ואקספלורר)

1. תטען jQuery אל הדף(אם לא קיים שם כבר)

2. תרוץ על התוצאות, עבור כל תוצאה אתה גם יכול לבצע בקשת AJAX ולנתח אותה

3. תבנה מחרוזת שמכילה את הנתונים שאתה רוצה בצורת טבלא

4. בסיום התהליך פשוט תבדוק את הערך של המשתנה ב console ותעתיק אותו למסמך notepad

5. שמור כ xls וסגרת עניין

בצורה זו אתה יכול להיות משתמש רשום באתר ולהנות מהיכולת של jQuery בחיפוש אחרי התונים שאתה צריך

עברתי כך פעם על ~7000 דפים באתר מסויים עם 50~ תוצאות בכל עמוד, נאלצתי לפצל את התהליך כי זה ריסק את הדפדפן,

אבל 860 תוצאות זה כלום עבור המשימה הזו

# February 2, 2011 11:50 AM

Shlomo כתב/ה:

רעיון נחמד מאוד, במקרה שלי הייתי צריך לתת למנהל אפליקצייה שעושה את זה

# February 2, 2011 9:10 PM

שלמה גולדברג (הרב דוטנט) כתב/ה:

כיצד אפשר לייצר AddIn שמוסיף קטעי html לכל הדפדפנים (IE) הפתוחים (תודה ל תומר קיסר על העזרה) ראשית נוסיף

# March 30, 2011 9:38 AM

דינה כתב/ה:

אם אני צריכה לטעון כתובות url לעיתים קרובות יותר(100 אתרים ביום-בערך).

מה הדרך המומלצת?

# May 2, 2012 3:00 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 5 and 8 and type the answer here:


Enter the numbers above: