java抓取网页程序的问题

xiuyouxu 2012-08-14 02:39:18
最近需要对一个抓网页程序调优, 原本的程序是分布式的, 运行在hadoop上, 每天需要抓取的网页数量在1000万左右, 结果保存在mongodb中, hadoop集群中5台机器用于运行抓网页程序. 但是每天的网页都不能抓完, 程序运行比较慢, 平均计算, 每天大概抓取不到100万个页面.

抓网页程序是利用apache的HttpClient包实现的, 没有设置连接超时, 我自己用URL类和HttpURLConnection类写了一个, 设置连接超时时间为1秒, 测试发现抓取网页的速度约为0.7秒每个页面, 不知道速度能不能再快点.

另外测试过网页抓取后保存到mongodb中的性能问题, 发现保存到mongodb中比保存到文件中速度还快一点(可能是我写的保存到文件程序效率太低了).

从网上看到了一些开源的爬虫程序, 不知道哪个比较快, 能不能做到一台机器0.1秒抓取一个网页呢?

请有经验的给点建议, 谢谢.
...全文
389 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
y244360439 2012-10-22
  • 打赏
  • 举报
回复
这里有篇php的小偷本地化程序http://blog.csdn.net/y244360439/article/details/8098043
Sammie 2012-08-14
  • 打赏
  • 举报
回复
优化线程池
xiuyouxu 2012-08-14
  • 打赏
  • 举报
回复
我写的是多线程的, 设置了connect time out, 发现分别设置为1秒和300毫秒, 抓取1000个网页的总时间相差不太多.
scbb 2012-08-14
  • 打赏
  • 举报
回复

不光是你的网速。
你去抓的那些网页和你的链接速度呢?

比如你带宽10M, 你想想自己去其他网站下载都能有1M的下载速度吗?

[Quote=引用 5 楼 的回复:]

程序运行环境为10M带宽, 运维组同事说足够抓网页使用, 目前还是觉得程序可以再优化一些

发现建立连接挺费时间, 不知道怎么做到对相同domain下的页面, 只建立一次连接?
[/Quote]

一次连接好像不行吧?
你们的程序已经是多线程的了嘛??


xiuyouxu 2012-08-14
  • 打赏
  • 举报
回复
程序运行环境为10M带宽, 运维组同事说足够抓网页使用, 目前还是觉得程序可以再优化一些

发现建立连接挺费时间, 不知道怎么做到对相同domain下的页面, 只建立一次连接?
scbb 2012-08-14
  • 打赏
  • 举报
回复
这个不是和执行程序环境的网速有关吗??
xiuyouxu 2012-08-14
  • 打赏
  • 举报
回复
呃, 我是发错地方了吗, 不知道该发到哪里啊...
leehao_vip 2012-08-14
  • 打赏
  • 举报
回复
太高级了,不懂

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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