Парсинг html + javascript - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Я хочу написать парсер, чтобы получать нужную информацию с сайта для дальнейшей работы с ней. Начал изучать, нашел множество примеров, которые внятно поясняют, что и как делать, но не подходит для моего варианта. Проблема в том, что информация, которая нужна мне, выводится через javascript и при парсинге страницы, парсится все, кроме таблицы с нужной информацией (вместо нее надпись "Loading..."). Как решить данную проблему, поделитесь знаниями и опытом? P.S. Сайт получает информацию поэтапно, как я понял, прочитав пару тем. Есть парсер этого сайта для Excel, и там такой метод получения

(нужной мне)

информации, в три этапа: 1. "Открыть сайт site.ru в IE", 2. "Прокрутить страницу вниз" 3. "Закрыть IE". Для удобства есть окошко с кодом, полученным с сайта, в нем есть весь код в html, даже тот, что получается через javascript. Если есть подобные команды для c#, php, буду очень признателен. P.P.S. Язык программирования по сути не важен, но отдаю предпочтение C# дабы парсер был в виде *.exe программы с выводом данных в Excel или txt. P.P.P.S Извиняюсь за такой фанатизм к описанию данной темы. Самое главное - как мне получить эту информацию, есть ли варианты, как в Excel парсере?

Решение задачи: «Парсинг html + javascript»

textual
Листинг программы
  1. public class ExcelMaker : IExcelMaker
  2.     {
  3.         public async void ToMakeExcel(Task<IEnumerable<Bill>> xmls, Task<object[,]> excel)
  4.         => await Task.Run( async() =>
  5.         {
  6.             #region XmlToArray
  7.             var _xmls = await xmls;
  8.             var xmlData = _xmls.Select(xml =>
  9.             {
  10.                 ExcelData ExcelData = new ExcelData();
  11.                 ExcelData.Date = DateTime.Parse(xml.Title.B_start, null, DateTimeStyles.RoundtripKind);
  12.                 var temp = xml.Ch_details.Charges_d.Charge_d.Select(d =>
  13.                     new { call = d.C_num, tot = d.C_tot }).ToArray();
  14.  
  15.                 string[,] arrXml = new string[temp.Length, 2];
  16.                 for (int i = 0; i < arrXml.GetUpperBound(0); i++)
  17.                 {
  18.                     arrXml[i, 0] = temp[i].call;
  19.                     arrXml[i, 1] = temp[i].tot;
  20.                 }
  21.                 ExcelData.Excel = arrXml;
  22.                 return ExcelData;
  23.             }).OrderBy(xml=>xml.Date).ToList();
  24.             #endregion
  25.  
  26.  
  27.             #region ToExcel
  28.             var excalResult = excel.Result;
  29.  
  30.             for (int i = 4; i < xmlData.Count + 4; i++)
  31.             {
  32.                 excalResult = Sorts(excalResult, xmlData[i - 4].Excel, i);
  33.             }
  34.  
  35.             Excel.Application xlApp = new Excel.Application();
  36.  
  37.             Excel.Workbook xlWb;
  38.             Excel.Worksheet xlSht;
  39.             //var abs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  40.  
  41.             xlWb = xlApp.Workbooks.Add(System.Reflection.Missing.Value);
  42.             xlSht = (Excel.Worksheet)xlWb.Sheets[1];
  43.  
  44.             xlSht.Range["A1"]
  45.                 .Resize[excalResult.GetUpperBound(0), excalResult.GetUpperBound(1)]
  46.                 .Value = excalResult;
  47.             var excelDate = xmlData.Select(xml => xml.Date.ToString("MMM.yyyy")).ToArray();          
  48.             xlSht.Range["D2"].Resize[1, excelDate.Length].Value = excelDate;
  49.             xlSht.Columns["B:Z"].AutoFit();
  50.  
  51.             xlWb.Close(true);
  52.             xlApp.Quit();
  53.             #endregion
  54.         });
  55.         public static object[,] Sorts(object[,] arrExcel, string[,] arrXml, int n)
  56.         {
  57.             for (int i = 1; i <= arrExcel.GetLength(0); i++)
  58.                 for (int j = 0; j < arrXml.GetLength(0); j++)
  59.                     if (arrExcel[i, 2]?.ToString().Trim() == arrXml[j, 0]?.Trim().Substring(2))
  60.                     {
  61.                         arrExcel[i, n] = arrXml[j, 1];
  62.                     }
  63.  
  64.             return arrExcel;
  65. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут