我怎样才能逃脱
本文关键字:逃脱 | 更新日期: 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&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&sig=0_seDQVVTDQQx1hvN3BRktZNFc9Ew%3D" style="left:-1000em;position:absolute">Screen-reader users, click here to turn off ggg Instant.</a>
我需要得到这个部分:
/setprefs?suggon=2&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&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&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&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吗?)。