[この質問には、HTMLAgilityPack と XPath を使用した選択的なスクリーン スクレイピングに住んでいる親戚がいます]
次のような一般的な外観を持つ、解析する HTML がいくつかあります。
...
<tr>
<td><a href="" title="">Text Data here (1)</a></td>
<td>Text Data here(2)</td>
<td>Text Data here(3)</td>
<td>Text Data here(4)</td>
<td>Text Data here(5)</td>
<td>Text Data here(6)</td>
<td><a href="link here {1}" class="image"><img alt="" src="" /></a></td>
</tr>
<tr>
<td><a href="" title="">Text Data here (1)</a></td>
<td>Text Data here(2)</td>
<td>Text Data here(3)</td>
<td>Text Data here(4)</td>
<td>Text Data here(5)</td>
<td>Text Data here(6)</td>
<td><a href="link here {1}" class="image"><img alt="" src="" /></a></td>
</tr>
...
次のような意味のあるチャンクで解析できる方法を探しています。
(1)、(2)、(3)、(4)、(5)、(6)、{1} CRLF
(1)、(2)、(3)、(4)、(5)、(6) 、{1}CRLF
など
私は2つの方法を試しました:
方法1:
var dataList = currentDoc.DocumentNode.Descendants("tr")
.Select
(
tr => tr.Descendants("td").Select(td => td.InnerText).ToList()
).ToList();
これは s の内部テキストをtd
取得しますが、リンク {1} の取得に失敗します。ここでは、多数のリストを含むリストが作成されます。ネストされた foreach を使用して管理できます。
方法 2:
var dataList = currentDoc.DocumentNode
.SelectNodes("//tr//td//text()|//tr//td//a//@href");
リンク {1} とすべてのデータは取得できますが、整理されていません。ここでは、すべてのデータが大きなチャンクで存在します。一方のデータtr
は相対的であるため、その関係を失います。
では、どうすればこの問題を解決できますか?