このサイトをスクレイプしようとしています http://www.gotickets.com/calendar.php?Display=Daily&Date=2013-03-12&EventTypeID=2&EventID=0&GenreID=159&VenueID=0&MarketAreaID=0
これが私が興味を持っていることです
データは次のように階層的に編成されています
<div class="clr dayItem">
<div class="clr genreHeader">Alternative Rock</div>
<div class="clr genreEvents">
<div class="clr dayEvent">
<a href="/concert/muse/houston_1339329.php" title="7:00 PM Muse - Toyota Center - TX">Muse - Toyota Center - TX - 7:00 PM
</a>
</div>
<div class="clr dayEvent">
<a href="/concert/matchbox_20/pooler_1347335.php" title="7:30 PM Matchbox 20 - Johnny Mercer Theatre">Matchbox 20 - Johnny Mercer Theatre - 7:30 PM
</a>
</div>
etc...
</div>
</div>
したがって、基本的にページは2つの列に分割され、各列には、属を含むDayItemsとhrefsを含むdayEventsがあります。
私はデータを取り出そうとしていますが、xpathはまったく初めてで、今日までRegexを使用しています。
正規表現は面倒で複雑になりすぎているので、xPathを選択しました
私が使用するDayItemsを取得するには:
var cl = document.DocumentNode.SelectNodes("//*[contains(concat(' ', normalize-space(@class), ' '), ' dayItem ')]");
foreach (var item in cl.Where(x=> x.Attributes.Any(p=>p.Value == "clr dayItem" && p.OriginalName=="class")))
{
/// THIS LINE FAILS
var genre = item.SelectSingleNode("//.[contains(concat(' ', normalize-space(@class), ' '), ' genre ')]");
Console.WriteLine(item.Name);
foreach (var attr in item.Attributes.Select(x => x.OriginalName + ".." + x.Value))
{
Console.WriteLine(attr);
}
}