Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 位于div正下方的Scrape html_C#_Html_Xpath - Fatal编程技术网

C# 位于div正下方的Scrape html

C# 位于div正下方的Scrape html,c#,html,xpath,C#,Html,Xpath,我有一些html,想从中提取一些数据 HTML的结构如下所示 <div class="someClass"><span class="someOtherClass">Text</span></div> <table> <tbody> <tr> <td>label</td> <td>data</td> </tr>

我有一些html,想从中提取一些数据

HTML的结构如下所示

<div class="someClass"><span class="someOtherClass">Text</span></div>

<table>
  <tbody>
    <tr>
      <td>label</td>
      <td>data</td>
    </tr>
    <tr>
      <td>label</td>
      <td>data</td>
    </tr>
    <tr>
      <td>label</td>
      <td>data</td>
    </tr>
  </tbody>
</table>

<div class="someClass"><span class="someOtherClass">Text</span></div>
      <table>
  <tbody>
    <tr>
      <td>label</td>
      <td>data</td>
    </tr>
    <tr>
      <td>label</td>
      <td>data</td>
    </tr>
    <tr>
      <td>label</td>
      <td>data</td>
    </tr>
  </tbody>
</table>
<div class="someClass"><span class="someOtherClass">Text</span></div>
文本
标签
数据
标签
数据
标签
数据
文本
标签
数据
标签
数据
标签
数据
文本
我需要能够刮取位于span where class=“someOtherClass”(我已经实现了这一部分)中的文本值

然后我需要能够直接在div下面刮表。因为“parent”div实际上不包含表,所以在实现这一点时遇到了一些问题

我需要能够刮取位于跨度中的文本值

你不需要正则表达式。Xpath查询就足够了

var text = doc.DocumentNode
            .SelectNodes("//span[@class='someOtherClass']")
            .Select(x => x.InnerText)
            .ToList();
然后我需要能够直接在div下面刮桌子

使用类似的xpath

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlstring);

var tables = doc.DocumentNode
             .SelectNodes("//span[@class='someOtherClass']/following::table").ToList();
foreach (var table in tables)
{
    var list = table.Descendants("tr")
                    .Select(tr => tr.Descendants("td")
                    .Select(td => td.InnerText).ToList())
                    .ToList();
}

您的html似乎没有格式错误。htmlagilitypack的HTMLDocument应该能够找到要从其DOM中提取的结构,您尝试过吗?如果您仍然想使用正则表达式-请先阅读所有文章。@EitanSeri Levi-我编辑了您的文章,删除了文章正文中的正则表达式标记和正则表达式详细信息。请接受编辑。尽管有些人只监视某些标签和标题,但要意识到这一点。以后请多加小心。我相信Xpath帖子有一百万个副本。当我有时间的时候,我会把它标记为一个副本。祝你好运!!英俊的solution@sln别担心。HtmlAgilityPack在解析格式错误的htmls时非常灵活:)@sln应该是这样的。我相信你已经读过这个著名的答案@sln Nice,我希望没有人需要对它进行更改。这只是第一级通用标记解析(包含不可见的内容)。我用这个做了一个SAX解析器。我也有数百个刮板模块来查找具体数据。它在格式错误的html上从不犹豫,而且速度极快。