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
之间的部分
我也尝试过使用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读取整个文本?
答案 0 :(得分:1)
根据您的输入,EndsWith
并未提供帮助(因为您的输入实际上以</a>
结尾。您的下一个最佳选择是存储{的位置(位置) {1}},然后从您存储的位置开始查找下一次出现的href="
。例如
"
比使用实际的HTML解析器更好(我可能会推荐HtmlAgilityPack吗?)。