爬虫程序中通过socket下载网页的问题

Coder李海波 2007-11-02 06:42:51
我的程序已经能成功爬取网页了,我想再改进一下。
int sock = socket(AF_INET, SOCK_STREAM, 0);
对于同一个站点如http://news.sina.com.cn/.../*.html,能否缓存sock,获取同一个站点下的不同页面时,使用缓存的sock,不再创建一个新的socket,因为每次创建都比较慢的。
另外,是不是还要区分http协议1.0和1.1的区别,如:http://book.csdn.net/bookfiles/147/1001476261.shtml,
是不是如果支持http1.1,我的想法就能实现呢?如何实现?大家给点建议吧。
...全文
533 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿牛138588 2008-03-26
  • 打赏
  • 举报
回复
Coder李海波 2007-11-06
  • 打赏
  • 举报
回复
这个问题不是Socket的问题,而是Http协议的问题,从http1.1协议来看,是可行的,我正在研究。
pass86 2007-11-05
  • 打赏
  • 举报
回复
我觉得也用PYTHON比较合适,虽然不大熟悉。
UPJF
herman~~ 2007-11-05
  • 打赏
  • 举报
回复
mark一个
  • 打赏
  • 举报
回复
刚才试了一下,有的服务器是可以的

telnet www.sina.com.cn 80
然后发送
GET / HTTP/1.1
Host:blog.sina.com.cn
Connection: Keep-Alive
两次回车
等返回信息结束,在输入
GET / HTTP/1.1
Host:blog.sina.com.cn
Connection: Keep-Alive
一次就能看到第二次的相应信息
loops 2007-11-05
  • 打赏
  • 举报
回复
我记得是可以的,如果服务器支持http1.1的话。
你收完一个网页,再发GET请求就可以了。
Coder李海波 2007-11-05
  • 打赏
  • 举报
回复
我没有做过这块,我自己研究了一下http1.1的协议,然后自己想是否可以这样,因此过来问问,如果行,则性能可以大幅度提升。
  • 打赏
  • 举报
回复
我想知道你是在那里看到的能发送多个请求的?
Coder李海波 2007-11-05
  • 打赏
  • 举报
回复
to chenyi3315
多线程我肯定会做,但是我里的问题是,怎么建立一次Socket链接,能发送多个请求和响应。

to akirya
HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
----------------------------------------------------------------------------------------
http://book.csdn.net/bookfiles/147/1001476261.shtml
上面网址中,指出了一个网页内可以建立一次连接,进行多次请求和响应。
我想了解的是,能否在多个同一站点的网页中,建立一次连接,而进行多次请求。
  • 打赏
  • 举报
回复
http规定了,每次连接只交互一次,
结束之后就除了断开就什么也做不了了
所以每次都得请求.
第二是你的请求带版本号,如果是1.1的服务器支持1.1那么就给你返回1.1的格式
weiym 2007-11-02
  • 打赏
  • 举报
回复
这种东西用Python写吧,很方便
YJ1973 2007-11-02
  • 打赏
  • 举报
回复
第一个问题 解决方案:socket池
http协议1.0和1.1是应用层协议,你只要获取数据,不需要对数据解释的时候(例如使用HTTP控件)时,不用关心.
chenyi3315 2007-11-02
  • 打赏
  • 举报
回复
……工作室什么时候用繁体字了。。。
可以采用多线程处理,把sock交给不同的线程处理。
飞哥 2007-11-02
  • 打赏
  • 举报
回复
我對網絡不熟悉
不能給出好的答案

我下載網葉的話也是通過一些開園的庫,如libcurl,lib3w
healer_kx 2007-11-02
  • 打赏
  • 举报
回复
别想得太好了,TCP就是这个样子的。。。 。。。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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