gpt4 book ai didi

c# - 使用 Anglesharp 从 html 字符串中获取列表
  • 标签的集合
  • 转载 作者:行者123 更新时间:2023-12-05 05:16:59 24 4
    gpt4 key购买 nike

    我正在尝试从维基百科页面(“https://en.wikipedia.org/wiki/Category:The_Kinks_songs”)获取歌曲标题列表

    这是我目前正在尝试的代码

    //Get page source and parse it
    string pageSource = PageSource.Get(url);// own method
    HtmlParser parser = new HtmlParser();
    var doc = parser.Parse(pageSource);

    //Get div tag with class="mw-category"
    var div_mw_content_ltr = doc.All.Where(tag => tag.LocalName == "div" && tag.GetAttribute("class") == "mw-category");
    //Get all li tags
    var li = div_mw_content_ltr.All(tag => tag.LocalName == "li");

    List<string> LS = new List<string>();
    foreach (var item in div_mw_content_ltr)
    {
    string tmp = item.TextContent;
    LS.Add(tmp);
    }

    return LS;

    我对这些东西真的很陌生。var li 是 false,我希望它是 div_mw_content_ltr 中列表项标签的集合。

    我试图创建一个新的解析器并解析 div_mw_content_ltr 的 innerhtml,但该成员不存在。

    我已经在 stackoverflow 及其他平台上搜索了所有 anglesharp 标签,但找不到解决方案。我觉得在您甚至可以理解如何使用 anglesharp 之前,需要一些解析 html 和查询选择器等的基础知识,所以作为一个方面,我也很感激任何资源链接到我可以更好地理解如何使用的地方实际使用 anglesharp 库。

    感谢您花时间阅读。

    最佳答案

    问题

    你的 div_mw_content_ltrIEnumerable<IElement>因为那是Where返回。所以使用 All它是一种不同的方法,如果所有元素都满足您的条件,它只会返回 true 或 false。它返回 false,因为列表中唯一的元素是 div,它不会递归返回所有符合条件的元素。


    让它与 LINQ 一起工作

    更改 WhereFirst因为你只期待一个,这也允许使用 Descendents :

    var div_mw_content_ltr = doc.All.First(tag => tag.LocalName == "div" && tag.GetAttribute("class") == "mw-category");

    而不是 All , 使用 Descendents它返回 div 的所有后代,然后使用 Where过滤:

    var li = div_mw_content_ltr.Descendents().Where(tag => tag.NodeName.ToLower() == "li");

    查询选择器

    AngleSharp 是基于 DOM 的,所以我会使用查询选择器 QuerySelector (第一场比赛)或 QuerySelectorAll (所有比赛)。

    与上面的 LINQ 等效的是:

    var li = doc.QuerySelectorAll("div.mw-category li");

    div.mv-category li表示获取所有div s 的 css 类为 mw-category然后所有 li就在里面。

    查询选择器的语法基本上是 CSS Selector syntax ,所以它不是 AngleSharp 特有的东西。如果您曾经使用过 CSS,那么这应该很熟悉。

    如果您还没有,请阅读 wiki对于 AngleSharp。

    关于c# - 使用 Anglesharp 从 html 字符串中获取列表 <li> 标签的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728674/

    24 4 0