2014-11-26 2 views
0
<a class="support" style="letter-spacing: -1px" href="/support/index.php?/Knowledgebase/List/updates" data-executing="0">I'm random</a>  

Я пытаюсь очистить указанный атрибут ссылки с помощью xpath, текст ссылки "I'm random" всегда меняется. Остальное остается прежним. Текст "I'm random" - это то, что я ищу, чтобы царапать.Xpath Web scrape

Я действительно не понимаю xpath, Как бы я потянул только внутренний текст? Я пробовал:

string html = Web.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML"); 
var htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.LoadHtml(html); 
var Attributes = new List<string>(); 
var Randomtxt = htmlDoc.DocumentNode.SelectNodes("//a[‌​@href]"); 
if (Randomtxt != null) 
{ 
    foreach (var contents in Randomtxt) 
    { 
     string href = contents.InnerHtml; 
     var parts = href.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); 
     if (parts.Length > 1) 
     { 
      Attributes.Add(parts[1]); 
     } 
    } 
    Attribute.DataSource = Attributes; 
}  

Но он ничего не возвращает. Как мне получить только внутренний текст.

+0

[ссылка:] (http://nyqui.st/parsing-html-in-c) 'htmlDoc.DocumentNode.SelectNodes ("// а [@href]")', то для каждого узла , вызовите 'node.InnerHtml'. – kennyzx

+0

Объясните определяющие характеристики ссылки, которую вы хотите получить. Есть ли какие-либо, кроме «имеет« href »? (Кроме того, XPath не очень сложно. Вы пытались забрать его в течение нескольких часов или сразу же отказались?) – Tomalak

+0

Я только начинаю, часть, которую я хочу, это случайный текст. Мне не нужна ссылка href. Только текст, который сгенерирован – user3674312

ответ

1

Не xpath, но это работает для того, что я хочу, проблема решена.

List<string> Attributes = new List<string>(); 
    string html = Web.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML"); 
    MatchCollection m1 = Regex.Matches(html, @"data-executing=\s*(.+?)\s*/a>", RegexOptions.Singleline); 

    foreach (Match m in m1) 
    { 
     string new = m.Groups[1].Value; 
     Attributes.Add(new); 
    } 
    Attribute.DataSource = Attributes; 
0

сначала найти единственный узел

вар Randomtxt = htmlDoc.DocumentNode.SelectSingleNode ("// * [@ класс = 'поддержка']");

затем вытащить внутренний тексту

строкового значения = Randomtxt.Innertext;

+0

'// * [@ class = 'support']/a' ничего не найдет. – Tomalak

+0

Я могу вытащить ссылки. Часть, которую я не могу получить, это случайный текст, который сгенерирован. – user3674312

+0

Сколько узлов с именем класса "поддержка"? один или больше? – SuncoastOwner