我怎样才能逃脱

本文关键字:逃脱 | 更新日期: 2023-09-27 17:53:38

if (richTextBox1.Lines[i].StartsWith(@"<a href=""") ||
     richTextBox1.Lines[i].EndsWith(@""""))

StartsWith应为<a href="EndsWith应该是单个"

但是现在我什么结果也没有。

输入示例:

<a href="/setprefs?suggon=2&amp;prev=https://www.test.com/search?q%3D%2Band%2B%26espv%3D2%26biw%3D960%26bih%3D489%26source%3Dlnms%26tbm%3Disch%26sa%3DX%26ei%3DYrxxVb-hJqac7gba0YOgDQ%26ved%3D0CAYQ_AUoAQ&amp;sig=0_seDQVVTDQQx1hvN3BRktZNFc9Ew%3D" style="left:-1000em;position:absolute">Screen-reader users, click here to turn off ggg Instant.</a>

我需要得到这个部分:

/setprefs?suggon=2&amp;prev=https://www.test.com/search?q%3D%2Band%2B%26espv%3D2%26biw%3D960%26bih%3D489%26source%3Dlnms%26tbm%3Disch%26sa%3DX%26ei%3DYrxxVb-hJqac7gba0YOgDQ%26ved%3D0CAYQ_AUoAQ&amp;sig=0_seDQVVTDQQx1hvN3BRktZNFc9Ew%3D

之间的部分

我也尝试使用htmllagilitypack:

HtmlAgilityPack.HtmlWeb hw = new HtmlAgilityPack.HtmlWeb();
                        HtmlAgilityPack.HtmlDocument doc = hw.Load("https://www.test.com");                       
                        foreach (HtmlAgilityPack.HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
                        {
                            string hrefValue = link.GetAttributeValue("href", string.Empty);
                                if (!newHtmls.Contains(hrefValue) && hrefValue.Contains("images"))
                                    newHtmls.Add(hrefValue);
                        }

但是这只给了我一个链接。当我浏览并查看页面viewsource时,我用单词image或images进行搜索和过滤,我得到超过350个结果。

我也尝试了这个解决方案:

var document = new HtmlWeb().Load(url);
var urls = document.DocumentNode.Descendants("img")
                                .Select(e => e.GetAttributeValue("src", null))
                                .Where(s => !String.IsNullOrEmpty(s));

但是它没有给我我需要的结果。

忘记提及的页面内容的视图源,我复制到richTextBox1窗口,然后我从richTextBox1逐行阅读文本,所以也许这就是为什么我没有得到我需要的结果?

for (int i = 0; i < richTextBox1.Lines.Length; i++)
                {
                    if (richTextBox1.Lines[i].StartsWith("<a href='"") &&
                        richTextBox1.Lines[i].EndsWith("'""))
                    {
                        listBox1.Items.Add(richTextBox1.Lines[i]);
                    }
                }

也许在浏览器(chrome)中的视图源内容与richTextbox1中的不一样。也许我不应该从richTextBox1逐行读取它也许要从richTextBox1首先读取整个文本?

我怎样才能逃脱

根据您的输入,EndsWith没有帮助(因为您的输入实际上以</a>结束)。您的次佳选择是存储href="的位置(位置),然后从存储位置开始查找下一次出现的"。例如

var input = @"<a href=""/setprefs?suggon=2&amp;prev=https://www.test.com/search?q%3D%2Band%2B%26espv%3D2%26biw%3D960%26bih%3D489%26source%3Dlnms%26tbm%3Disch%26sa%3DX%26ei%3DYrxxVb-hJqac7gba0YOgDQ%26ved%3D0CAYQ_AUoAQ&amp;sig=0_seDQVVTDQQx1hvN3BRktZNFc9Ew%3D"" style=""left:-1000em;position:absolute"">Screen-reader users, click here to turn off ggg Instant.</a>";
var needle = @"href=""";
var start = input.IndexOf(needle);
if (start != -1)
{
    start += needle.Length;
    var end = input.IndexOf(@"""", start);
    // final result:
    var href = input.Substring(start, end - start).Dump();
}

比这更好的方法是使用一个实际的HTML解析器(我可能会推荐htmllagilitypack吗?)。