我正在使用 htmlagilitypack 来提取几个 html-tags。继承人我做什么:
HtmlDoc = new HtmlDocument();
StringReader sr = new StringReader(decodedHTML);
HtmlDoc.Load(sr);
sr.close();
var anchor_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_ANCHOR + "[@" + HTML.ATTRIBUT_HREF + "]");
var embed_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_EMBED + "[@" + HTML.TAG_EMBED_SRC + "]");
var iframe_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_IFRAME + "[@" + HTML.TAG_IFRAME_SRC + "]");
var img_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_IMG + "[@" + HTML.TAG_IMG_SRC + "]");
var audio_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_AUDIO); // may contain inner-html
var object_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_OBJECT); // may contain inner-html
var video_tags = HtmlDoc.DocumentNode.SelectNodes("//" + HTML.TAG_VIDEO); // may contain inner-html
其中 decodedHTML 是打包在字符串中的 html 页面。之后我检查上面的变量是否为空
if (anchor_tags != null)
{
ExtractLinks_AnchorTags(anchor_tags);
}
if(audio_tags != null)
{
ExtractLinks_AudioTags(audio_tags);
}
if(embed_tags!=null)
{
ExtractLinks_EmbedTags(embed_tags);
}
if (iframe_tags != null)
{
ExtractLinks_iFrameTags(iframe_tags);
}
if (img_tags != null)
{
ExtractLinks_ImgTags(img_tags);
}
if (object_tags != null)
{
ExtractLinks_ObjectTags(object_tags);
}
if (video_tags != null)
{
ExtractLinks_ObjectTags(video_tags);
}
其中一些肯定是空的,因为大多数 extractLinks 方法甚至都没有被调用。例如,当我访问 youtube 时。com 。有几个 iframe-tags 并且代码无法识别它们。
编辑:
当我删除
iframe 时"[@" + HTML.TAG_IFRAME_SRC + "]"
,iframe 被识别,但我只想提取具有 src 属性的 iframe。它的正确 xpath 语法是什么?