我写了一个小的scraper,用于通过HTTP打开与远程服务器上的PHP脚本的连接,并将它找到的一些XML泵入本地文件。
不完全是火箭科学,我知道。
下面的代码是整个刮刀(清理和匿名)。
此代码工作正常,除了一个小细节,似乎无论XML文件的大小(1 MB或7 MB),生成的XML文件总是缺少一小部分(600-800个字符) 。
备注:
如果我在Firefox中打开php页面 - 我的整个文档都没问题。
如果我启动wireshark并运行下面的程序,我会看到整个文档通过网络传输,但没有写入文件。
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
namespace myNameSpace
{
class Program
{
static void Main(string[] args)
{
Console.Write("BEGIN TRANSMISSION\n");
writeXMLtoFile();
Console.Write("END TRANSMISSION\n");
}
public static void writeXMLtoFile()
{
String url = "http://somevalidurl.com/dataPage.php?lotsofpars=true";
TextWriter tw = new StreamWriter("xml\\myFile.xml");
tw.Write(ScreenScrape(url));
Console.Write(" ... DONE\n");
tw.Close();
}
public static string ScreenScrape(string url)
{
System.Net.WebRequest request = System.Net.WebRequest.Create(url);
using (System.Net.WebResponse response = request.GetResponse())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
}
}
}
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
namespace myNameSpace
{
class Program
{
static void Main(string[] args)
{
Console.Write("BEGIN TRANSMISSION\n");
writeXMLtoFile();
Console.Write("END TRANSMISSION\n");
}
public static void writeXMLtoFile()
{
String url = "http://somevalidurl.com/dataPage.php?lotsofpars=true";
TextWriter tw = new StreamWriter("xml\\myFile.xml");
tw.Write(ScreenScrape(url));
Console.Write(" ... DONE\n");
tw.Close();
}
public static string ScreenScrape(string url)
{
System.Net.WebRequest request = System.Net.WebRequest.Create(url);
using (System.Net.WebResponse response = request.GetResponse())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
}
}
}
我应该使用不同的作家吗?我已经尝试过TextWriter和StreamWriter同样的效果。
来自冰岛的亲切问候,
Gzur
答案 0 :(得分:1)
尝试:
XmlDocument doc = new XmlDocument();
doc.Load(url);
doc.Save(filename);
这真的很容易(显然有一些错误处理)。 .Net框架应该为您做一切。我大约一个月前跳过篮球试图做同样的事情并在我阅读XmlDocument上的帮助文件时踢了一脚;)
答案 1 :(得分:1)
此外,如果您真的只想将页面下载到文件系统,请调查WebClient.DownloadFile
方法:)
答案 2 :(得分:0)
可能就像在StreamWriter上调用Flush()一样简单,但为什么要让自己的生活变得艰难?用以下代码替换整个writeXMLtoFile函数:
public static void writeXMLtoFile()
{
string url = "http://somevalidurl.com/dataPage.php?lotsofpars=true";
string xml = ScreenScrape(url);
File.WriteAllText("xml\\myFile.xml", xml);
}
这样,你也可以使用调试器来查看发生了什么(检查xml变量)。