以下は、経済カレンダーのスクリーン スクレイピングに使用されるコードの抜粋です。XPath を使用して解析する HTML ページには、この行がテーブルの最初の行として含まれます。(HTML ページ全体ではなく、この行のみを貼り付けました。)
<tr class="calendar_row newday singleevent" data-eventid="42064"> <td class="date"><div class="date">Sun<div>Dec 23</div></div></td> <td class="time">All Day</td> <td class="currency">JPY</td> <td class="impact"> <div title="Non-Economic" class="holiday"></div> </td> <td class="event"><div>Bank Holiday</div></td> <td class="detail"><a class="calendar_detail level1" data-level="1"></a></td> <td class="actual"> </td> <td class="forecast"></td> <td class="previous"></td> <td class="graph"></td> </tr>
XPath を使用して最初の tr 行を選択するこのコード:
var doc = new HtmlDocument();
doc.Load(new StringReader(html));
var rows = doc.DocumentNode.SelectNodes("//tr[@class=\"calendar_row\"]");
var rowHtml = rows[0].InnerHtml;
問題は、rowHtml がこれを返すことです。
<td class="date"></td> <td class="time">All Day</td> <td class="currency">EUR</td> <td class="impact"> <div title="Non-Economic" class="holiday"></div> </td> <td class="event"> <div>French Bank Holiday</div> </td> <td class="detail"><a class="calendar_detail level2" data-level="2"></a></td> <td class="actual"> </td> <td class="forecast"></td> <td class="previous"></td> <td class="graph"></td>
これで、日付の td 列の内容が消えたことがわかります! なんで?
私は多くのことを実験し、なぜそのコラムの内容が削除されたのかについて困惑しました。他の列には、それが保持するコンテンツがあります。では、日付列の何が問題なのですか?
コンテンツのドロップを引き起こす、または防ぐための何らかの設定またはプロパティがどこかにありますか?
何が問題なのか手がかりがなくても、さらに調査する方法についていくつか提案があります。