Scrape html位于div正下方

时间:2017-08-17 19:34:18

标签: c# html xpath

我有一些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 =&#34; someOtherClass&#34;的范围内的Text值。 (我已经实施了这部分)

然后我需要能够直接在div下面刮桌子。由于&#34;父母&#34; div实际上并不包含该表,我在实现这一点时遇到了一些问题。

1 个答案:

答案 0 :(得分:4)

  

我需要能够刮取范围

中的Text值

你不需要正则表达式。 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();
}