为了账号安全,请及时绑定邮箱和手机立即绑定

c# substring - 解析其间的所有文本

c# substring - 解析其间的所有文本

C#
扬帆大鱼 2022-12-24 15:00:19
试图从下面的 html 代码中解析所有文本(主要是 url)。但我只想获取这些 div 标签 (result-firstline-title) 和 (result-url js-result-url) 之间的 url,用于每次(全部)事件。需要明确的是,我能够从下面的 html 源代码中获取所有 url,但问题是它也几乎获取了 3 次 url。为此,我有一个修复程序可以删除重复的 url,但是,如果您仔细查看 html 源代码,您会发现它也获取了第三个 url。<div class="result js-result card-mobile "><div class="result-firstline-container">    <div class="result-firstline-title">        <a            class="result-title js-result-title"            href="https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554"        >            The Top Social Networking Sites People Are Using        </a>    </div></div><a    class="result-url js-result-url"    href="https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554">https://www.lifewire.com/top-<b>social-networking-sites</b>-people-are...</a><p class="result-snippet">    The Top</p></div><div class="result js-result card-mobile ">    <div class="result-firstline-container">        <div class="result-firstline-title">            <a                class="result-title js-result-title"                href="http://www.ebizmba.com/articles/social-networking- websites"            >                Top 15 Most Popular Social Networking Sites | January 2019            </a>        </div>    </div>    <a        class="result-url js-result-url"        href="http://www.ebizmba.com/articles/social-networking- websites">www.ebizmba.com/articles/<b>social-networking</b>-<b>websites</b>    </a>    <p class="result-snippet">        Top 15 Most     </p></div>     我尝试了以下 c# 代码来获取 div 标签之间的文本,但它获取了我不想要的所有内容。        int urlTagFrom = rawHTMLFromSource.IndexOf("result-firstline-title") + "result-firstline-title".Length;        int urlTagTo = rawHTMLFromSource.LastIndexOf("result-url js-result-url");        urlTagCollection = rawHTMLFromSource.Substring(urlTagFrom, urlTagTo - urlTagFrom);
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您可以使用 HTMLAgilityPack使其更容易,只需使用 NuGet 将其包含在您的项目中。


使用 NuGet 添加 HTMLAgilityPack


转到Package Manager Console并键入Install-Package HtmlAgilityPack -Version 1.11.3


安装后,您可以像下面那样提取 Urls。


var doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(@"put html string here");


var listOfUrls = new List<string>();

doc.DocumentNode.SelectNodes("//a").ToList()

   .ForEach(x=> 

           {

              //Use HasClass method to filter elements 

              if (!string.IsNullOrEmpty(x.GetAttributeValue("href", "")) 

                   && x.HasClass("result-title") && x.HasClass("js-result-title"))

              {

                 listOfUrls.Add(x.GetAttributeValue("href", ""));

              }

           });


listOfUrls.ForEach(x => Console.WriteLine(x));

编辑


添加&& x.HasClass("result-title") && x.HasClass("js-result-title")到仅显示那些具有类 result-title 和 js-result-title 的元素。


其它的办法


更短的另一种获取过滤值的方法。


var doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(@"put html string here");


var listOfUrls = doc.DocumentNode.Descendants("a")

    .Where(x => x.Attributes["class"] != null 

                && x.Attributes["class"].Value == "result-title js-result-title")

    .Select(x => x.GetAttributeValue("href", "")).ToList();


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信