2012-03-04 21 views
1

2つのメタタグ値のWebページを解析する必要があります。私は、メタタグデータのWebページhtmlを解析するのに最も効果的な方法は何か分かりません。ダウンロードしたHTMLファイルからメタタグを抽出する最も簡単な方法

ウェブページのHTML文字列をxmlに変換し、metaタグの解析ができますか?

WebClient wc = new WebClient(); 
wc.Headers.Set("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19 (.NET CLR 3.5.30729; .NET4.0E)"); 
string html = wc.DownloadString(String.Format("http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress={0}", ip)); 
XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(html); // ERROR HERE: "The 'meta' start tag on line 23 position 2 does not match the end tag of 'head'. Line 26, position 3" 
XmlNodeList interNode = xdoc.DocumentElement.SelectNodes("//meta"); 

私は、すべてのC#ライブラリに慣れていないよ、私がしようとしたときも、私はエラーを取得しています返されたHTML

からすべてのメタタグを得ることが容易になるだろう、より良い選択肢がありますhtmlを解析してください:

23行目の 'meta'開始タグの位置2が 'head'の終了タグ と一致しません。行26、位置3

+0

HtmlAgilityパックとちょうど十分なC# – Lloyd

答えて

0

XMLパーサの代わりにHTMLパーサーを使用することができます。XMLとして解析する前に文字列を操作することも、正規表現を使用することもできます。このような状況に適しています。だから、と仮定System.Text.RegularExpressionsがインポートされます。

Regex metaTag = new Regex(@"<meta name=\"(.+?)\" content=\"(.+?)\">"); 
Dictionary<string, string> metaInformation = new Dictionary<string, string>(); 

foreach(Match m in metaTag.Matches(html)) { 
    metaInformation.Add(m.Groups[1].Value, m.Groups[2].Value); 
} 

さて、あなただけmetaInformation["meta name"]として任意のメタデータにアクセスすることができます。

3

HTML Agility Packをお勧めします。それは間違ったHTMLをうまく処理しますが、ノード/値を分離するためのXPathの力を与えます。

あなたの選択は(.NET 4.0を使用して)次のようになります。

var nodes = doc.DocumentNode.SelectNodes("//meta"); 
+0

ほんの少しの問題を使用することを学ぶ - 正しい構文は、 'VARノード= doc.DocumentNode.SelectNodesです( "// meta"); ' – SimSimY

+0

実際、あなたは正しい、修正されています。ありがとう – Pat

関連する問題