我要从网站中提取一些数据,我使用HTML敏捷包,但令人惊讶的是,当我使用其远程地址时,无法正确分析此网站,因此我必须将文件保存到本地系统,然后使用HTML敏捷性包。如何将此文件复制到我的服务器,然后使用HTML敏捷包来分析和提取数据?
例如这是我的远程文件: www.testsite.com/testfile.html
我想将此文件保存到我的服务器,然后使用本地文件(我使用C#)
答案 0 :(得分:1)
经过我的调查,我发现使用WebRequest将无法获得完整的html源代码,因为页面的其他部分被单独调用,如使用ajax,css,images等数据。有解决方案可以获得完整的html页面的代码和使用WebBrowser控件,但您应该使用Windows应用程序。在这里尝试这个解决方案。
创建Windows应用程序。
从工具箱中拖放WebBrowser控件。
在Form-Load上添加以下代码。
webBrowser1.Url = new Uri(“http://tse.ir/default.aspx”); webBrowser1.DocumentCompleted + = webBrowser1_DocumentCompleted;
添加以下方法。
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();
}
}
运行您的应用程序并检查保存的文件。
答案 1 :(得分: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);