1

我要从一个站点中提取一些数据,我使用 HTML 敏捷包,但令人惊讶的是,当我使用它的远程地址时无法正确分析该站点,所以我必须将文件保存到本地系统,然后使用 HTML 敏捷包。如何将此文件复制到我的服务器,然后使用 HTML 敏捷包来分析和提取数据?

例如这是我的远程文件:www.testsite.com/testfile.html

我想将此文件保存到我的服务器,然后使用本地文件(我使用 C#)

4

2 回答 2

1

经过我的调查,我发现使用 WebRequest 将无法获得完整的 html 源代码,因为页面的其他部分被单独调用,例如使用 ajax、css、图像等的数据。有一种解决方案可以获取完整的 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 requesthttp 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 回答