【发布时间】:2013-03-12 13:02:30
【问题描述】:
这就是我的兴趣
数据按层次组织如下
<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>
所以基本上 页面分为两列 每列都有 DayItems 其中包括基因 以及带有 href 的 dayEvents
我一直在尝试获取数据,但我对 xpath 完全陌生,并且一直在使用 Regex 直到今天
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);
}
}
【问题讨论】:
-
那么您到底需要什么? clr dayEvent DIVs 元素中所有A元素的内容?
-
我需要所有的事件数据,所以我可以创建一个 csv 文件,以进行旋转我已经附加了一个工作示例,但我仍然希望有机会学习如何完全并且仅在 xpath 中执行此操作
标签: xpath web-scraping html-agility-pack