2017-01-24 6 views
0

私のアプリケーションでは、ブログ記事の画像のURLを取得する必要があります。これを行うために私はHtmlAgilityPackを使用しています。 XPathとHtmlAgilityPackを使用してHTMLドキュメントノードを取得する最も速い方法は何ですか?

この

は、私がこれまで持っているコードです:

static string GetBlogImageUrl(string postUrl) 
{ 
    string imageUrl = string.Empty; 

    using (WebClient client = new WebClient()) 
    { 
     string htmlString = client.DownloadString(postUrl); 
     HtmlDocument htmlDocument = new HtmlDocument(); 
     htmlDocument.LoadHtml(htmlString); 
     string xPath = "/html/body/div[contains(@class, 'container')]/div[contains(@class, 'content_border')]/div[contains(@class, 'single-post')]/main[contains(@class, 'site-main')]/article/header/div[contains(@class, 'featured_image')]/img"; 
     HtmlNode node = htmlDocument.DocumentNode.SelectSingleNode(xPath); 
     imageUrl = node.GetAttributeValue("src", string.Empty); 
    } 

    return imageUrl; 
} 

問題は、私はそれがで画像のURLを抽出するために約3秒かかることに私は気づいたいくつかのテストをしたとき、これは、遅すぎるということです指定されたページフィードを読み込んで赤色の記事を表示しようとすると問題になります。

ロードしたい要素の絶対パスを使用しようとしましたが、改善が見られませんでした。これを達成するためのより速い方法がありますか?

+0

あなたは解析しているhtml構造を共有できますか? – eLRuLL

+0

これは実際にネットワーク接続とそのサーバーの応答に依存します。 Xpathは、ドキュメントがメモリにロードされるとアプリの速度を落とさず、超高速です。 –

+0

@HungCao私は、特集したイメージを得るために、企業ブログからブログ投稿を解析しようとしています。ここに一つの例があります。 http://blog.cedrotech.com/5-tendencias-mobile-que-sua-empresa-precisa-acompanhar/ – artie

答えて

0

このコードを試して、それが高速かどうかを確認できますか?

string Url = "http://blog.cedrotech.com/5-tendencias-mobile-que-sua-empresa-precisa-acompanhar/"; HtmlWeb web = new HtmlWeb(); HtmlDocument doc = web.Load(Url); var featureDiv = doc.DocumentNode.Descendants("div").FirstOrDefault(_ => _.Attributes.Contains("class") && _.Attributes["class"].Value.Contains("featured_image")); var img = featureDiv.ChildNodes.First(_ => _.Name.Equals("img")); var imgUrl = img.Attributes["src"];

+0

こんにちは。私はこの方法で試してみたところ、元のコードよりもスピードの向上はなかった。これは私が企業のプロキシの背後にいるという事実と関係がありますか? – artie

+0

うん、それはここで唯一の問題だと思う。 –

関連する問題