Как я могу прочитать содержимое параметра url по ссылке на веб-странице? - PullRequest
0 голосов
/ 06 июня 2018

В настоящее время я создаю консольное приложение C # с HtmlAgilityPack, где я пытаюсь получить значение параметра ссылки, которая находится на веб-странице.В общем, у меня есть веб-страница, на этой странице есть куча ссылок.И одна из ссылок имеет параметр под названием "&pagenumber=[some number]".Я пытаюсь получить значение после &pagenumber= и сохранить его в переменной int.

Шаги:

  1. Перейти на сайт(http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1)

  2. Найдите текст «Последняя страница» в URL-адресе внизу страницы:

<a href="http://forum.tibia.com/forum/?action=board&amp;boardid=25&amp;threadage=-1&amp;pageitems=30&amp;pagenumber=974">Last Page</a>

Получить значение параметра из "pagenumber" (в данном случае "974")

Сохранить его в целочисленную переменную

Мой код на данный момент:

string PageLink = "http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1";
Task.Run(async () =>
{
    using (var client = new HttpClient())
    {
        // Load the html of the page
        var html = await client.GetStringAsync(PageLink);
        var document = new HtmlAgilityPack.HtmlDocument();
        document.LoadHtml(html);

        // Find the "Last Page" link at bottom of page
        var lastPageLink = document.DocumentNode.Descendants("a").First(x => x.Attributes["href"].Value.Contains("&amp;threadage=-1&amp;pageitems=30&amp;pagenumber=")).InnerHtml;

        // Print out the pagenumber value
        Console.WriteLine(lastPageLink);
    }
}).Wait(1000);

Однако мой код ничего не печатает, поэтому мне интересно, что я здесь не так делаю.Я не получаю никакой ошибки.Я в основном пытался найти все ссылки (a-tag), я смотрю на их значение "href" и вижу, содержит ли он "& threadage = -1 & pageitems = 30 & pagenumber =".И если это произойдет, он должен выбрать его HTML-код.

Итак, сейчас я хочу, чтобы мой код напечатал: http://forum.tibia.com/forum/?action=board&boardid=25&threadage=-1&pageitems=30&pagenumber=974

Затем я могу перейти к использованию Regex или чего-то еще, чтобы получить «974».

Очень важно, чтобы URL содержал «board & boardid = 25 & threadage = -1», потому что в нем есть другие ссылки со значением «Последняя страница».

1 Ответ

0 голосов
/ 06 июня 2018
var lastPageLink = document.DocumentNode.Descendants("a").First(x => x.Attributes["href"] != null && x.Attributes["href"].Value.Contains("&amp;threadage=-1&amp;pageitems=30&amp;pagenumber=")).Attributes["href"].Value;

Два изменения,

  1. Я добавил x.Attributes["href"] != null && в начало лямбда-оператора, чтобы предотвратить NullReferenceException, когда ссылка не имеет атрибута href.
  2. Переключен .InnerHtml на .Attributes["href"].Value для печати URL вместо Last Page.

Парсинг

var matchingString = "&amp;threadage=-1&amp;pageitems=30&amp;pagenumber=";
var start = lastPageLink.IndexOf(matchingString) + matchingString.Length;
var end = lastPageLink.Length - start;
var pageNumber = lastPageLink.IndexOf(matchingString) >= 0 ? lastPageLink.Substring(start, end) : "Unknown";
Console.WriteLine("Page #: " + pageNumber);

Должен получить то, что выхочу.Я не знаю регулярных выражений, поэтому, если вы хотите использовать это, вам придется это выяснить самостоятельно.

ПРИМЕЧАНИЕ: Я сделал предположение, что pagenumber будет последним параметром url, который не являетсявсегда правда.Поэтому, если вы используете этот код не только для краткосрочного использования, я бы изменил его соответствующим образом.

...