Парсинг 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
Листинг программы
public class ExcelMaker : IExcelMaker { public async void ToMakeExcel(Task<IEnumerable<Bill>> xmls, Task<object[,]> excel) => await Task.Run( async() => { #region XmlToArray var _xmls = await xmls; var xmlData = _xmls.Select(xml => { ExcelData ExcelData = new ExcelData(); ExcelData.Date = DateTime.Parse(xml.Title.B_start, null, DateTimeStyles.RoundtripKind); var temp = xml.Ch_details.Charges_d.Charge_d.Select(d => new { call = d.C_num, tot = d.C_tot }).ToArray(); string[,] arrXml = new string[temp.Length, 2]; for (int i = 0; i < arrXml.GetUpperBound(0); i++) { arrXml[i, 0] = temp[i].call; arrXml[i, 1] = temp[i].tot; } ExcelData.Excel = arrXml; return ExcelData; }).OrderBy(xml=>xml.Date).ToList(); #endregion #region ToExcel var excalResult = excel.Result; for (int i = 4; i < xmlData.Count + 4; i++) { excalResult = Sorts(excalResult, xmlData[i - 4].Excel, i); } Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWb; Excel.Worksheet xlSht; //var abs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; xlWb = xlApp.Workbooks.Add(System.Reflection.Missing.Value); xlSht = (Excel.Worksheet)xlWb.Sheets[1]; xlSht.Range["A1"] .Resize[excalResult.GetUpperBound(0), excalResult.GetUpperBound(1)] .Value = excalResult; var excelDate = xmlData.Select(xml => xml.Date.ToString("MMM.yyyy")).ToArray(); xlSht.Range["D2"].Resize[1, excelDate.Length].Value = excelDate; xlSht.Columns["B:Z"].AutoFit(); xlWb.Close(true); xlApp.Quit(); #endregion }); public static object[,] Sorts(object[,] arrExcel, string[,] arrXml, int n) { for (int i = 1; i <= arrExcel.GetLength(0); i++) for (int j = 0; j < arrXml.GetLength(0); j++) if (arrExcel[i, 2]?.ToString().Trim() == arrXml[j, 0]?.Trim().Substring(2)) { arrExcel[i, n] = arrXml[j, 1]; } return arrExcel; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д