求助高手,谢谢!

hyou_euler 2010-12-03 01:18:17
我自己写了个小代码,去新浪网页爬虫100个子网页的内容,我步骤是这样的:
1、建一个socket,然后连接到www.sina.com.cn,该步也是运用socket编程中的connect()函数;
2、
for 1 to 100 //遍历新浪的100个子网页的url
{
1)对每个url发生http请求;
2)然后运用socke中的recv()函数,把网页内容下载过来;
}

可是,新浪只能让我下一个网页内容然后就不让下了,一直recv不到东西,返回值一直0;但是连接还在,我怎么样才能下完同域名下的这100个网页(只connect一次)
163.com就可以一直爬虫多个子网页,新浪就不能。
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
就像是你电脑同时开100个软件一样,结果可能就死机了一样,你试下一次下载5个看看有没有用,有用的话就再每次下载5个,下完了再下第6-10个,也可以在其中第3个下完时马上下第6个,让这5个线程都不空着。
刘津宇教编程 2010-12-03
  • 打赏
  • 举报
回复
#region 获取指定网址的HTML
public static bool Download(string url, ref string html)
{
Stream strmPage = null;
StreamReader srPage = null;
try
{
var client = new WebClient();
strmPage = client.OpenRead(url);
//var wrqPage = (HttpWebRequest)WebRequest.Create(url);//根据制定的URL字符构造一个网络请求
//wrqPage.UserAgent = "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)";//设定UserAgent的属性
//wrqPage.Method = "GET";
//wrqPage.Timeout = 60000;
//var wrpPage = wrqPage.GetResponse();//获取网络相应
//strmPage = wrpPage.GetResponseStream();//获取网络相应的数据流
//strmPage.WriteTimeout = 60000;
srPage = new StreamReader(strmPage, Encoding.GetEncoding("GBK"));//将获取的数据流构造为一个StreamReader,用来读取流的内容
try
{
html = srPage.ReadToEnd();//使用StreamReader读取到流的末尾,并将读取的内容存储到HTML变量中
var mp = new MainPage();
Thread.Sleep(Convert.ToInt32(mp.TbIntervalTime.Text.Equals("") ? "0" : mp.TbIntervalTime.Text));//采集速度限制
}
catch
{
return false;
}
strmPage.Close();
return true;
}
catch (WebException)
{
return false;
}
finally
{
if (strmPage != null)
{
strmPage.Close();
}
if (srPage != null)
{
srPage.Close();
}
}
}
#endregion

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧