【发布时间】:2015-06-05 20:51:50
【问题描述】:
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);
}
但这只给了我 1 个链接。 当我浏览并查看页面视图源时,我使用图像或图像这个词进行搜索和过滤,我得到了 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中阅读整个文本?
【问题讨论】:
-
应该是这样...
-
请显示输入值。
-
不会以
">结尾吗?正如丹尼尔所说,需要输入值。顺便说一句,你真的应该在 HtmlAgilityPack 上寻找这种东西。 -
也应该是 && 而不是 ||如果您需要两个表达式都为真。
标签: c# .net winforms html-agility-pack