1

HTML agility pack を使用してサイトからデータを抽出しようとしていますが、驚くべきことに、リモート アドレスを使用するとこのサイトを正しく分析できないため、ファイルをローカル システムに保存してから、HTML agility pack を使用する必要があります。このファイルをサーバーにコピーし、HTML アジリティ パックを使用してデータを分析および抽出するにはどうすればよいですか?

たとえば、これは私のリモート ファイルです: www.testsite.com/testfile.html

このファイルをサーバーに保存してから、ローカル ファイルを操作したい (C# を使用)

4

2 に答える 2

1

調査の結果、Ajax、css、画像などを使用したデータのように、ページの他の部分が個別に呼び出されているため、WebRequest を使用しても完全な html ソースを取得できないことがわかりました。ページであり、WebBrowser コントロールを使用していますが、Windows アプリケーションを使用する必要があります。ここでこの解決策を試してください。

  1. Windows アプリケーションを作成します。

  2. ツール ボックスから WebBrowser コントロールをドラッグ アンド ドロップします。

  3. Form-Load に次のコードを追加します。

    webBrowser1.Url = new Uri(" http://tse.ir/default.aspx "); webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;

  4. 以下のメソッドを追加します。

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            var browser = sender as WebBrowser;
            var htmlPath = Path.Combine("C:\\Test", "testhtml.html");
            using (var writer = new StreamWriter(htmlPath, false, Encoding.UTF8))
            {
                if (browser != null) writer.WriteLine(browser.DocumentText);
                writer.Close();
            }
        }
    
  5. アプリケーションを実行し、保存されたファイルを確認します。

于 2013-03-08T05:19:55.423 に答える
0

http web requestあなたはを利用することができますhttp web response

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.testsite.com/testfile.html");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
//string login = string.Format("go=&Fuser={0}&Fpass={1}", user, password);
//byte[] postbuf = Encoding.ASCII.GetBytes(login);
//req.ContentLength = postbuf.Length;
Stream rs = req.GetRequestStream();
rs.Write(postbuf,0,postbuf.Length);
rs.Close();
WebResponse resp = req.GetResponse();

これで、応答をストリームにキャストして、htmlファイルとして保存できます。

// we will read data via the response stream
Stream ReceiveStream = resp.GetResponseStream();

string filename = ...;

byte[] buffer = new byte[1024];
FileStream outFile = new FileStream(filename, FileMode.Create);

int bytesRead;
while((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0)
outFile.Write(buffer, 0, bytesRead);
于 2013-03-08T05:09:47.353 に答える