首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#子字符串-解析之间的所有文本

c#子字符串-解析之间的所有文本
EN

Stack Overflow用户
提问于 2019-04-24 05:46:52
回答 1查看 121关注 0票数 1

试图解析下面html代码中的所有文本(主要是url)。但我只想获取这些div标记(结果-第一线-标题)和(结果- url js-结果-url)之间的url。

为了明确起见,我可以从下面的html源抓取所有的url,但问题是它也抓取了url几乎3次。为此,我有一个用于删除重复url的修复程序,但是,如果仔细查看html源代码,您将看到它也获取了第三个url。

代码语言:javascript
复制
<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标记之间的文本,但是它抓住了所有我不想要的东西。

代码语言:javascript
复制
        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);

为了获取url,我使用以下方法:

var regexURLParser = new Regex(@"(http|ftp|https):\/\/([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?", RegexOptions.Singleline | RegexOptions.CultureInvariant);

我想要的是这些网址:

代码语言:javascript
复制
        <a
            class="result-title js-result-title"

            href="https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554"

        >

        <a
            class="result-title js-result-title"

            href="http://www.ebizmba.com/articles/social-networking-websites"

        >

因此,结果只显示:

代码语言:javascript
复制
https://www.lifewire.com/top-social-networking-sites-people-are-using-3486554
http://www.ebizmba.com/articles/social-networking-websites 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 09:55:04

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

使用HTMLAgilityPack添加NuGet

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

安装之后,您可以提取如下所示的Urls。

代码语言:javascript
复制
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")添加到只显示具有类结果标题和js结果标题的元素。

另一种方式

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

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55823138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档