2016-09-04 15 views
0

現在のページですべてのリンクを取得してから、必要なリンクを探してアンカー(「a」の開始タグと終了タグの間のテキスト)を取得したいこのリンクの "obj.GetAttribute(" innerText ")"を使用しようとしましたが、空の文字列を返します。CSQueryを使用してリンクのアンカーを取得する方法

WebClient client = new WebClient(); 
string htmlCode = client.DownloadString("http://mysite1.com"); 

CQ cq = CQ.Create(htmlCode); 
foreach (IDomObject obj in cq.Find("a")){ 
string href = obj.GetAttribute("href"); 
    if (href.IndexOf("mysite2.com") != -1){ 
     //get the anchor of this link 
    } 
} 
+0

あなたのコードには「CQ」とは何ですか? –

答えて

0

最後に解決します。

using CsQuery; 

CQ cq = CQ.Create(htmlCode); 
foreach (IDomObject obj in cq.Find("a")){ 
     string linkAnchor = obj.InnerHTML; 
} 

しかし、ロシア語のテキストに問題があります。いくつかのケースでは(必ずしもそうではない)、ロシアのテキストはUnicode文字コードとして読み込みます。たとえば、すべてのロシア語の文字は "&#1013"のようなものです。 そこで私は、ロシア文字のそのような表現をロシア語の文字でデコードする関数を書いた。

private string DecodeFromUTFCode(string input){ 
    input = input.Replace("&#", ""); 
    StringBuilder decodedAnchor = new StringBuilder(); 
    StringBuilder currentUnicodeNum = new StringBuilder(); 
    bool isInNumber = false; 

    for (int i = 0; i <= input.Length - 1; i++){ 
     if (Char.IsDigit(input[i])){ 
      isInNumber = true; 
     }else{ 
      isInNumber = false; 
      if (input[i] != ';') decodedAnchor.Append(input[i]); 
     } 

     if (isInNumber){ 
      currentUnicodeNum.Append(input[i]); 
     } 

     if ((input[i] == ';') || (i == input.Length - 1)){ 
      string decoded = char.ConvertFromUtf32(int.Parse(currentUnicodeNum.ToString())); 
      decodedAnchor.Append(decoded); 
      currentUnicodeNum.Clear(); 
     } 
    } 

    return decodedAnchor.ToString(); 
} 
関連する問題