我现在需要做一个采集程序,采集量比较大 带宽比较有限 遇到三点问题
1.能否在获取网页源代码的时候截取一部分获取 比如获取前5kb的网页源代码 就和迅雷断点续传一样 中途中断连接,
2.有些网站对采集程序做了限制 返回源代码是错误的 难道webrequest没有办法完全模仿ie去获取一个网页么?
3.有些网站在连接数上做了限制 一个ip只有两个链接 我开50个线程去访问这个站 也就是开50个链接,结果有48个等待 慢慢的这些等待的线程越来越多 最后导致连接数过多断网。这个有没有办法解决 和判断链接是否处于等待状态把它自动结束掉或者重新再连或者有其他更好的办法
1.能否在获取网页源代码的时候截取一部分获取 比如获取前5kb的网页源代码 就和迅雷断点续传一样 中途中断连接,
2.有些网站对采集程序做了限制 返回源代码是错误的 难道webrequest没有办法完全模仿ie去获取一个网页么?
3.有些网站在连接数上做了限制 一个ip只有两个链接 我开50个线程去访问这个站 也就是开50个链接,结果有48个等待 慢慢的这些等待的线程越来越多 最后导致连接数过多断网。这个有没有办法解决 和判断链接是否处于等待状态把它自动结束掉或者重新再连或者有其他更好的办法
解决方案 »
- 酒精测试
- 怎么获取系统盘temp文件夹下名字中含swan的文件?
- dtc["customers"].select(f1,srt)后数据会变吗? dataview
- 多文档父窗体事件如何绑定子窗体事件
- 我只有BLEND 2中文版, 请问如何编辑Silverlight 2? SP1英文版补丁打不上。
- 微软Visual C# 组的项目经理出的小测验,大家都来试试。。。
- winform (c#)下,页面怎么跳到另一个页面.....
- 请问一下哪有免费的C#呀VB.NET的教学视频下呀?3Q3Q3Q
- 菜得要哭系列3:求(string)和.ToString()的区别……
- UDP通讯 同样的客户端一个可以收到一个却不能
- C#关于goto的问题
- 在C#中怎么保存外部数据?
Stream receiveStream = hwrp.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream);
Char[] read = new Char[256];
// Reads 256 characters at a time.
int count = readStream.Read(read, 0, 256);
if (count > 0)
{
if (SniffWeb.pre_url.Count < 1000)
{
SniffWeb.pre_url.Add(urlString);
}
}
可见是不是可以只取部分? 2:
设置好header或者cookie之类,应该能够达到一般要求吧
顶
方法(1):可以试试Request.QueryString获取返回的数据流,再比较。
方法式(2):
HttpWebResponse res;
HttpWebRequest req;
try
{
req=(HttpWebRequest)WebRequest.Create(webstr);
res=(HttpWebResponse)req.GetResponse();
}
catch (Exception)
{
MessageBox.Show("出错了banyi","对不起找不到该网址");
return;
}
StreamReader strm=new StreamReader(res.GetResponseStream(),Encoding.GetEncoding(54936));//简体中文Encoding.GetEncoding(54936),Encoding.ASCII
string sLine;
string sLine2;
sLine2="";
do //学习笔记do循环C# do while 循环体 loop do until 循环体 loop
{
sLine=strm.ReadLine();
sLine2=sLine2+sLine;
}
while (sLine!=null);
strm.Close();
ul(sLine2);
}
}
}
2. 模拟IE貌似仅仅是在HTTP请求头上加User-Agent关键词就可以了
3. 你开50个线程去访问网站,怎么又会越堆越多啊?除非你是在无限制地建立线程。我觉得解决访问IP限制的方法就是,让其他的线程去采集其他网站的数据。