1

我正在使用 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 语法是什么?

4

1 回答 1

1

HtmlAgilityPack 不加载元素的内容iframe

为了iframe检查. src_ iframe_HtmlDocument

在此过程中,请注意以下可能的问题:

  • src属性可能包含一个相对 URI。例如,如果您访问http://www.example.com并看到一个iframehas src="/samplePage",您应该首先将其转换为绝对 URI(在这种情况下,http://www.example.com/samplePage

  • 有些iframe元素可能没有src标签,因为它是在浏览器中呈现文档时通过 javascript 动态添加的。也可以iframe使用 javascript 创建整个元素,如果您只是执行常规的HttpWebRequest. 在这种情况下,您必须分析页面上存在的 javascript 并在您的程序中复制该逻辑。

更新

iframe具有src属性的元素的 XPath 表达式为://iframe[@src]

于 2013-01-15T13:55:02.830 回答