Я не могу прочитать все соответствующие данные с веб-страницы в браузере c# - PullRequest
1 голос
/ 07 февраля 2020

Я разрабатываю программу, которая считывает результаты соревнований по спортивному ориентированию с веб-страниц, извлекает данные с помощью регулярных выражений и проводит некоторый анализ данных. Типичную страницу можно увидеть здесь: http://obasen.orientering.se/winsplits/online/sv/table.asp?databaseId=67772&categoryId=2 Хотя программа использует WPF, веб-браузер имеет вид Windows Формы:

<WindowsFormsHost Width="390" Margin="0 0 20 0" Height="0">
   <wf:WebBrowser x:Name="wb" ScriptErrorsSuppressed="True" DocumentCompleted="Wb_DocumentCompleted"/>
</WindowsFormsHost>

Веб-содержимое получается с помощью кода:

wb.Navigate(address);
string str = wb.DocumentText;

где address - вышеуказанный веб-адрес.

Источник страницы для вышеуказанной страницы довольно грязный, но если мы сконцентрируемся на втором конкуренте (Тобиас Гелиус), HTML код на странице для второго ряда для этого участника:

<TR id="2_1" onMouseOver="highlight(2,true)" onMouseOut="highlight(2,false)">
<TD class="C1">Snättringe SK</TD>
<TD class="C37"><A title="-0.11">2.07</A></TD><TD class="C23">(1)</TD>
<TD class="C22"><A title="-0.17">5.42</A></TD><TD class="C23">(1)</TD>
<TD class="C21"><A title="+0.45">8.05</A></TD><TD class="C20">(3)</TD>
<TD class="C38"><A title="+1.31">10.53</A></TD><TD class="C39">(6)</TD>
<TD class="C38"><A title="+1.19">12.25</A></TD><TD class="C39">(5)</TD>
<TD class="C21"><A title="+1.17">17.36</A></TD><TD class="C20">(3)</TD>
<TD class="C21"><A title="+0.53">21.17</A></TD><TD class="C20">(3)</TD>
<TD class="C21"><A title="+0.39">27.21</A></TD><TD class="C20">(3)</TD>
<TD class="C21"><A title="+0.01">30.52</A></TD><TD class="C20">(2)</TD>
<TD class="C21"><A title="+0.29">36.32</A></TD><TD class="C20">(2)</TD>
<TD class="C21"><A title="+0.30">37.33</A></TD><TD class="C20">(2)</TD>
<TD class="C5">Snättringe SK</TD></TR>

Суммарное время пробега в контрольных точках составляет 2,07, 5,42, 8,05 и т. д. c, и позиция в гонке определяется число в скобках (1), (1), (3), (6) и т. д. c.

Когда я читаю страницу с вышеуказанным кодом, я получаю следующие данные:

<TR id=\"2_1\" onMouseOver=\"highlight(2,true)\" onMouseOut=\"highlight(2,false)\">
<TD class=\"C1\">Sn�ttringe SK</TD>
<TD class=\"C22\">2.07</TD>
<TD class=\"C14\">5.42</TD>
<TD class=\"C13\">8.05</TD>
<TD class=\"C23\">10.53</TD>
<TD class=\"C23\">12.25</TD>
<TD class=\"C13\">17.36</TD>
<TD class=\"C13\">21.17</TD>
<TD class=\"C13\">27.21</TD>
<TD class=\"C13\">30.52</TD>
<TD class=\"C13\">36.32</TD>
<TD class=\"C13\">37.33</TD>
<TD class=\"C4\">Sn�ttringe SK</TD></TR>

Как видно, много информации отсутствует, особенно значения позиций. Есть ли способ прочитать эти значения позиции?

1 Ответ

0 голосов
/ 07 февраля 2020

Знак вопроса, который вы видите в строке вывода, вызван несоответствием в кодировке

Преобразование его в UTF8 должно исправить это

  string str = wb.DocumentText;
  byte[] bytes = Encoding.Default.GetBytes(str);
  str = Encoding.UTF8.GetString(bytes);
...