网页上有一些数据。数据格式如下:
A[data],B[data],C[data],time.
这些数据,会实时的更新,有时候,一秒更新三五次,有时候,三五分钟才更新一次。
我通过编写代码,采集网页上面的数据,我真实的想法是每秒下载10次页面,这样就能保证即使每秒更新三五次,也不会漏掉。
后来发现,每秒采集10次,会被服务器断开,然后三秒的恢复时间,这三秒就导致数据没能采集到。
因为每条数据都 带有time字段的,所以,多线程下面,如果采集的乱序后,旧时间的数据就不能要了。
因为采集到的数据比较实时,我也要尽快的处理,所以,尽量不要延迟。
求问解决思路。
对方是一个TOMCAT,然后实时的更新网页内容。
我要做的就是把他更新的内容都采集过来。
谢谢了。
还有其他的回答吗?
博客园的提高悬赏功能好像有问题。
不能加分。
在WinForm程序里用一个WebBrowser打开这个页面,然后监控页面上对应元素的值。
这个方法适合普通的采集,如果想一秒采十次,持续24小时不间断,做不到的。
@硬盘很大: 一秒更新三五次一般用的是Ajax的方式实现。你不能高频率的去获取整个页面,那样必然被服务器按CC攻击过滤掉。用WebBrowser和你正常浏览一样,监控HTMLElement的值,不是分析整个页面的html文本。
@天边彩云: 服务器端是使用把数据库里的数据读出来,然后原样显示出来。
查看源码,看到的是纯文本的数据,没有HTML标签在里面的。
@天边彩云: 而且你说的Webbrowser来正常浏览,这个正常,只不过是发送的POST或者GET数据,然后获得网页内容。我使用Libcurl库的时候也是发送的正常数据,这个跟WebBrowser有区别吗?我查看过数据发送的内容,没有区别的。所以,我想,应该跟这个方面关系不大。
服务器定时断开我的高频率连接,应该是根据某种条件,比如说:每秒连接次数。
但是,我使用多线程的时候,可以减小数据的丢失,所以,应该不是根据IP的,可能是根据,IP+端口两个条件来判断的。目前还不确定是根据什么条件来断开我的连接的。
谢谢你的回复。
@硬盘很大: 用WebBrowser不是只为了GET数据过来,GET数据的话用HttpRequest就行了。如果你正常用浏览器访问能看到所有数据的话(比如页面上的数据不断自动刷新)用这种方法就能获取到所有数据;否则,只能考虑楼下代理的方法了。
可以靠率用代理吧。首先收集一批代理IP地址。然后每次采集随机指定一个代理地址。
这个要靠高可靠性,第一不能丢数据,第二速度快。
找些代理,这个不太靠谱吧。
我试试。对这个比较感兴趣。我qq:13604023002
加你QQ了
网页上做实时性的操作很难。你的问题一个程序跑肯定无论怎么做都有问题,最佳的是N台机器一起跑。
目前还没找到解决办法。在思考。。。。