Я пытался извлечь некоторые html из нашего Центрального банка, используя HtmlAgilityPack.
Вот Еженедельная учетная запись. Вторая половина Заявления «Учетная запись в соответствии с Бангладешским банковским ордером 1972 года .....» содержит строку «Золотая монета и слиток А.».
Я пробовал со следующим кодом -
var get = new HtmlWeb();
for (int i = 1; i < 8284; i++)
{
var dat = get.Load("https://www.bb.org.bd/pub/weekly/staffair/state_affairs.php?prId=" + i);
var htm = dat.DocumentNode.InnerHtml;
if (htm.Contains("Gold Coin and Bullion"))
{
File.WriteAllText(@"C:\Test\" + i + ".txt", htm);
Console.WriteLine(i + " written");
}
}
Если я нажму правой кнопкой мыши на странице и нажмите «Просмотреть источник», я не вижу строки «A. Золотая монета и слиток». dat.DocumentNode.InnerHtml
возвращает то же самое, в результате файл не записывается в тестовую папку. Но я могу видеть всю информацию, если я нажму «Inspect element» вместо «View source».
Как получить эту строку с помощью HtmlAgilityPack?
Причина, по которой вы не можете увидеть ее в источнике, - это то, что данные, которые вы ищете, загружаются через javascript (xhr) в ваш браузер после начальной загрузки страницы. HtmlAgiligyPack - это просто парсер HTML и не поддерживает запуск javascript и загрузку дополнительных ресурсов. Есть и другие способы сделать это, но вам нужно будет использовать другой инструмент. Это, вероятно, хорошее место для начала:
Загрузите DOM и выполните javascript на стороне сервера с помощью .Net