0

私は次のコードを持っていますが、それを起動すると、いくつかのURLが返されるようにシームするだけです。

while (stopFlag != true)
{
    WebRequest request = WebRequest.Create(urlList[i]);
    using (WebResponse response = request.GetResponse())
    {
        using (StreamReader reader = new StreamReader
           (response.GetResponseStream(), Encoding.UTF8))
        {
            string sitecontent = reader.ReadToEnd();
            //add links to the list
            // process the content
            //clear the text box ready for the HTML code
            //Regex urlRx = new Regex(@"((https?|ftp|file)\://|www.)[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*", RegexOptions.IgnoreCase);
            Regex urlRx = new Regex(@"(?<url>(http:[/][/]|www.)([a-z]|[A-Z]|[0-9]|[/.]|[~])*)", RegexOptions.IgnoreCase);

            MatchCollection matches = urlRx.Matches(sitecontent);
            foreach (Match match in matches)
            {
                string cleanMatch = cleanUP(match.Value);
                urlList.Add(cleanMatch);

                updateResults(theResults, "\"" + cleanMatch + "\",\n");

            }
        }
    }
}

エラーは正規表現内にあると思います。

私が達成しようとしているのは、Webページをプルし、そのページからすべてのリンクを取得することです。これらをリストに追加し、リストアイテムごとに次のページをフェッチして、プロセスを繰り返します。

4

1 に答える 1

3

正規表現を使用してHTMLを解析する代わりに、優れたHTMLパーサーを使用することをお勧めします。HTMLAgiltyPackが最適です。

Html Agility Pack(HAP)とは正確には何ですか?

これは、読み取り/書き込みDOMを構築し、プレーンXPATHまたはXSLTをサポートするアジャイルHTMLパーサーです(実際には、XPATHまたはXSLTを理解して使用する必要はありません。心配しないでください...)。これは、「Web外」のHTMLファイルを解析できるようにする.NETコードライブラリです。パーサーは、「現実世界」の不正な形式のHTMLに対して非常に寛容です。オブジェクトモデルは、System.Xmlを提案するものと非常に似ていますが、HTMLドキュメント(またはストリーム)用です。

于 2012-07-09T20:35:50.923 に答える