如何使用AngleSharp从维基百科页面提取<li>标签中的歌曲标题?
提取维基百科歌曲分类页面的歌曲标题解决方案
看起来你已经完成了页面获取和初始解析的步骤,我来帮你补全提取<li>标签及歌曲标题的完整逻辑:
// 获取页面源码并解析 string pageSource = PageSource.Get(url); // 自定义方法 HtmlParser parser = new HtmlParser(); var doc = parser.Parse(pageSource); // 获取class为"mw-category"的div标签(取第一个匹配项,页面中通常仅存在一个) var categoryDiv = doc.All .Where(tag => tag.LocalName == "div" && tag.GetAttribute("class") == "mw-category") .FirstOrDefault(); if (categoryDiv != null) { // 提取该div下所有的<li>标签 var songListItems = categoryDiv.Descendants("li"); // 遍历每个<li>,提取歌曲标题 foreach (var li in songListItems) { // 维基百科分类条目均以<a>标签承载,提取其文本内容作为歌曲名 var songAnchor = li.Descendants("a").FirstOrDefault(); if (songAnchor != null) { string songTitle = songAnchor.InnerHtml.Trim(); // 此处可替换为你需要的业务逻辑,比如存入列表、写入文件等 Console.WriteLine(songTitle); } } } else { Console.WriteLine("未找到包含歌曲列表的目标div,请检查页面结构是否更新"); }
关键细节说明:
- 用
FirstOrDefault()替代单纯的Where:页面中只会存在一个mw-category类的div,直接取第一个匹配项更高效,也避免了集合遍历的冗余。 - 使用
Descendants("li"):可以获取div下所有层级的<li>标签,完美适配维基百科分类页面的<ul>嵌套结构。 - 空引用判断:为
<a>标签添加空判断,避免页面结构异常时出现程序报错。 - 可扩展性提示:这类网页爬取逻辑依赖页面结构,若后续维基百科页面更新,记得检查
class属性或标签层级是否变化。
内容的提问来源于stack exchange,提问作者TEDSON
相关产品推荐
相关产品推荐

