请教:Jsoup抓取页面(不知何原因被阻止)

系统不允许重名! 发布于 2011/06/26 17:31
阅读 9K+
收藏 0

之前看过红薯的一个帖子   这么写是否正确

Document doc = Jsoup.connect(homepage).userAgent("Mozilla/5.0 (Windows NT 6.1; rv:5.0)").cookie("auth", "token").timeout(1000).get();

请大家不吝赐教 谢谢

错误代码如下

时而connet time out  时而read time out

Exception in thread "main" java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:129)
	at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
	at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
	at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
	at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:354)
	at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:337)
	at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:135)
	at org.jsoup.helper.HttpConnection.get(HttpConnection.java:124
加载中
0
Andre.Z
Andre.Z
你抓取得太狠了吧,速度快的话,对方网站服务器会不定时有一会无响应,处理如下:

1.对方网站有多个IP的时候,自己写个分发类,轮流去每个ip取。
2.对于1个IP的时候,遇到这种情况,当前线程就自动暂停几秒钟,然后再重试,自动马上重试的话,也有问题。
建议jsoup和httpclient一起用,httpclient去抓取信息,jsoup做分析。上面2种处理,用httpclient都好解决的,jsoup的特长在于分析,抓取是httpclient的特长。
connectTimeout和soTimeout一般都设置3秒就好了,抓取么,用单例就好,多线程的话,更容易遇到timeout。

AOJK
AOJK
我都还在测试,只抓了一次就被拦截了
0
SandKing
SandKing
你这是连接超时了,你把连接时间调一下  再看看
0
Andre.Z
Andre.Z
才1秒啊
0
系统不允许重名!
系统不允许重名!

引用来自“邓颖”的答案

你这是连接超时了,你把连接时间调一下  再看看
恩 好的 我试试   不过爬首页就被拒绝了
0
Andre.Z
Andre.Z
能浏览器浏览就不会被拒绝,linux下curl没问题就能抓取到
0
Andre.Z
Andre.Z
Jsoup.connect( homepage).userAgent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)").referrer("www.test.com").get()

加个referrer试试,host改成相应的,一般不加都行,timeout先去掉试试

0
蟋蟀哥哥
蟋蟀哥哥
调整抓取时间.
0
lorry
lorry
被你所抓取的网站屏蔽了,我也曾经遇到过你的问题,过一段时间就好了
0
系统不允许重名!
系统不允许重名!

引用来自“Andre.Z”的答案

你抓取得太狠了吧,速度快的话,对方网站服务器会不定时有一会无响应,处理如下:

1.对方网站有多个IP的时候,自己写个分发类,轮流去每个ip取。
2.对于1个IP的时候,遇到这种情况,当前线程就自动暂停几秒钟,然后再重试,自动马上重试的话,也有问题。
建议jsoup和httpclient一起用,httpclient去抓取信息,jsoup做分析。上面2种处理,用httpclient都好解决的,jsoup的特长在于分析,抓取是httpclient的特长。
connectTimeout和soTimeout一般都设置3秒就好了,抓取么,用单例就好,多线程的话,更容易遇到timeout。

谢谢你  我考虑用第二种方法抓取  超时设置10秒 应该足够了
Andre.Z
Andre.Z
@LiuxGnu:那个connection已经被对方服务器丢弃了的话,超时是没用的。只有重新发新的请求。
0
zheng_pat
zheng_pat
如果抓取的太厉害被服务器拒绝怎么办,用代理IP?
返回顶部
顶部