C# - Как получить привязку ссылки с помощью CSQuery
Я получаю все ссылки на текущей странице, а затем я ищу нужную ссылку, а затем хочу получить привязку (текст между открытым и конечным тегом "а") этой ссылки. Я пытался использовать "obj.GetAttribute("innerText")", но он возвращает пустую строку.
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
}
}
1 ответ
Наконец-то решите это.
using CsQuery;
CQ cq = CQ.Create(htmlCode);
foreach (IDomObject obj in cq.Find("a")){
string linkAnchor = obj.InnerHTML;
}
Но есть проблема с русским текстом. В некоторых случаях (не всегда) русский текст читается в виде символов Юникода. Например, все русские буквы имеют вид "& # 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();
}