我怎么能逃脱"?

时间:2015-06-05 20:51:51

标签: c# .net winforms html-agility-pack

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

之间的部分

我也尝试过使用htmlagilitypack:

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);
                        }

但这只给了我一个链接。 当我浏览并查看页面视图源时,我使用单词图像或图像进行搜索和过滤,即可获得超过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读取整个文本?

1 个答案:

答案 0 :(得分:1)

根据您的输入,EndsWith并未提供帮助(因为您的输入实际上以</a>结尾。您的下一个最佳选择是存储{的位置(位置) {1}},然后从您存储的位置开始查找下一次出现的href="。例如

"

比使用实际的HTML解析器更好(我可能会推荐HtmlAgilityPack吗?)。