1

Web サイトのフロント ページからデータを収集したいと考えています。各行を簡単に実行できますが、関心のある特定の行は 1 つだけです。そのため、正しい行を特定して番号 (この場合は 324) を抽出したいと考えています。これを行うにはどうすればよいですか?

<h2><a href="/mmp/it/su/">Weather</a></h2> <span class="jix_channels_count">(324)</span><br><p class="jix_channels_desc">Prog&oslash;r, su, si&oslash;r, tester</p>
4

2 に答える 2

2

コンテンツをダウンロードした後、 HTML Agility PackなどのHTMLパーサーを使用して、クラスspanに属する要素を識別します。jix_channels_count

別のオプションはSgmlReaderです。

あなたはあなたの質問にタグを付けましたregex-私はあなたがこの方向をとらないように心からアドバイスします。

(SgmlReaderを使用した)推奨されるアプローチは、多かれ少なかれ次のようになります。

var url = "www.that-website.com/foo/";
var myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();                
var responseStream = myResponse.GetResponseStream();
var sr = new StreamReader(responseStream, Encoding.Default);
var reader = new SgmlReader
             {
                 DocType = "HTML",
                 WhitespaceHandling = WhitespaceHandling.None,
                 CaseFolding = CaseFolding.ToLower,
                 InputStream = sr
             };
var xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
var nodeReader = new XmlNodeReader(xmlDoc);
XElement xml = XElement.Load(nodeReader); 

これで、LINQ to XMLを使用して、(再帰的またはその他の方法で)値が等しいspan属性を持つ要素を検索し、その要素の値を読み取ることができます。classjix_channels_count

于 2012-08-08T07:22:08.813 に答える
2

正規表現を使用した HTML ページの解析は間違っています。それでも、単一の html 行の正確な構造を知っていれば、その行を html コードと考えずに正規表現を使用できます。

数字が常に括弧内にあり、スパンが jix_channels_count クラスであると仮定すると、次のようになります。

Match match = Regex.Match(htmlLine, @"(\<span[^>]*class=""jix_channels_count[^>]*\>\()([^)]+)(\))", RegexOptions.IgnoreCase);
if (match.Success)
{
    string number = match.Groups[2].Value;
}
于 2012-08-08T07:29:05.343 に答える