私はいくつかのhtmlタグを抽出するhtmlagilitypackを使用しています。私が何をするのか、
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ページです。その後、上記の変数がnullであるかどうかを調べます
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メソッドのほとんどは呼び出されないため、それらのうちのいくつかは確実にnullです。たとえば私がyoutubeを訪問しているとき。 com。いくつかのiframeタグがあり、コードがそれらを認識しません。
編集:
"[@" + HTML.TAG_IFRAME_SRC + "]"
削除するとiframeが認識されますが、src属性でiframeを抽出したいだけです。そのための正しいxpath構文は何ですか?
HtmlAgilityPackはiframe
要素の内容を読み込みません。
iframe
の内容を調べるには、 src
属性( iframe
のURIを表します)を読み込み、別のWebリクエストを実行して別のHtmlDocument
にロードします。
途中で、これらの可能性のある問題に注意してください。
src
属性には相対URIを含めることができます。たとえば、 http://www.example.com/samplePage
http://www.example.com
し、 iframe
にsrc="/samplePage"
があることを確認した場合は、最初に絶対URI(この場合はhttp://www.example.com/samplePage
)
ドキュメントがブラウザでレンダリングされたときにjavascriptを使用して動的に追加されるため、一部のiframe
要素にはsrc
タグが含まれていない可能性があります。また、通常のHttpWebRequest
実行するだけでは表示されないjavascript要素でiframe
要素全体を作成することもできます。このような場合は、ページにあるJavaScriptを分析し、そのロジックをプログラムに複製する必要があります。
src
属性を持つiframe
要素のXPath式は次の//iframe[@src]