【问题标题】:I cannot read all relevant data from a web page with c# browser我无法使用 c# 浏览器从网页中读取所有相关数据
【发布时间】:2020-02-08 01:26:57
【问题描述】:

我正在设计一个程序,它从网页中读取定向比赛的结果,通过正则表达式提取数据,并对数据进行一些分析。一个典型的页面可以在这里看到:http://obasen.orientering.se/winsplits/online/sv/table.asp?databaseId=67772&categoryId=2 虽然该程序使用 WPF,但 Web 浏览器来自 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;

其中地址为上述网址。

上面页面的页面源码比较杂乱,但是如果我们专注于第二个竞争对手(Tobias Gelius),这个竞争对手的第二行页面上的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等,比赛中的位置由括号内的数字(1)、(1)、(3)、(6)等给出。

当我用上面的代码阅读页面时,我得到的数据如下:

<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>

可以看出很多信息丢失了,尤其是位置值。有没有办法读取这些位置值?

【问题讨论】:

  • 只是为了确定:您使用 ui 控件而不是 HttpClient 来获取数据进行处理是否有任何特殊原因? docs.microsoft.com/en-us/dotnet/api/…
  • 您好,您能否确认以下解决方案是否有助于解决您的问题,如果是,请单击绿色复选框标记为已解决:) –

标签: c# html wpf webbrowser-control


【解决方案1】:

您在字符串输出中看到的问号是由于编码不匹配

将其转换为 UTF8 应该可以解决此问题

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2013-04-11
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多