Парсинг HTML и разбор script по полочкам

214
27 декабря 2017, 18:10

Если спарсил HTML код и в нём есть что подобное:

<script>"text1":"value1","text2":"value2","text3":"value3"</script>

Как вытаскивать нужные значения ?

Пользовался раньше подобным вариантом:

String Response = wc.DownloadString(ssilka);
Rate = System.Text.RegularExpressions.Regex.Match(Response, @"""text1"":([^<]+),""value1""").Groups[1].Value;

Но сейчас, встречается две одинаковые строки в одном <script></script> и регулярка вытаскивает в итоге огромную часть кода.

Как вытаскивать правильно из того что находится в <script></script> ?

Answer 1

Попробуйте воспользоваться готовыми решениями. Например, есть jsoup - библиотека на Java, которая предназначена для разбора HTML-страниц, позволяя извлечь необходимые данные, используя DOM, CSS и методы в стиле jQuery. Есть порт на C#. Здесь можно ознакомиться с примерами (на Java).

Прежде чем задавать новые вопросы, настоятельно рекомендуется поискать

ru.stackoverflow.com/a/420355/203589

stackoverflow.com/a/18157325/5674802

Answer 2

Можно просто разбить с помощью String.Split(char) и перебрать в цикле, что-то вроде

using System.Xml;
...//прочий код программы
XmlNode script;//наш xml-узел
...//парсинг до xml-узлов
string[] sriptTextValuePairs = script.InnerText.Split(',');//побьём содержимое xml-узла на множество пар-подстрок
foreach(string tvPair in sriptTextValuePairs)//перебор пар
{
  string[] pair=tvPair.Split(':');//разобьём пару
  string text=pair[0].Trim('"');//вытащим значения
  string value=pair[1].Trim('"');
  ...//делаем что-то
};
READ ALSO
С# назначить кнопку через ComboBox для элемента

С# назначить кнопку через ComboBox для элемента

Здравствуйте, кто может подсказать и показать примерами как бы в роде простую задачку?

200
Task скачивания файла

Task скачивания файла

Запутался в одном вопросе, просьба знающих помочьПри открытии формы проверяю, существует ли на жёстком диске файл

204
c# [DllImport] в методе, функция из dll без обьявления

c# [DllImport] в методе, функция из dll без обьявления

Можно ли как-то в c# в самом методе подключить функцию из dll ? То есть, подобную конструкцию засунуть в метод (например метод Main):

189
GridContol Devexpress WPF MVVM [требует правки]

GridContol Devexpress WPF MVVM [требует правки]

I have many data from observable collection, the data in back end loaded asynchronousThe pattern is MVVM WPF

230