当前位置: 代码迷 >> J2SE >> java 怎么大量访问某个网站
  详细解决方案

java 怎么大量访问某个网站

热度:235   发布时间:2016-04-23 19:47:29.0
java 如何大量访问某个网站
我想用java做一个程序来大量摘取某网站的特定内容
下面的函数是用来建立链接并读取网站html源码的。

public static String getHtmlCode(String path) {
String html = "", temp = "";
try {
            URL u = new URL(path);
            URLConnection connection = u.openConnection();
            HttpURLConnection htCon = (HttpURLConnection) connection;
            htCon.addRequestProperty("baiduspider User-Agent", "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");
            int code = htCon.getResponseCode();
            if (code == HttpURLConnection.HTTP_OK) {
                System.out.println("find the website");
                BufferedReader in=new BufferedReader(new InputStreamReader(htCon.getInputStream()));
                while ((temp = in.readLine()) != null) 
                        html = html + " " + temp;
                    in.close();
                    htCon.disconnect();
            }
            else {
                System.out.println("Can not access the website");
            }
        }
        catch(MalformedURLException e ) {  
            System.out.println("Wrong URL");
        }
        catch(IOException e) {
            System.out.println("Can not connect");
        }
return html;
}

现在的问题是:如果这段代码连续执行次数达到20次左右,网站就不再返回代码了,而是返回空白,要过一段时间后才能再有内容。我怀疑是网站禁止了我的ip,可是用浏览器却可以访问网站。而且就算我降低频率到每3秒读取一次,还是会发生上述情况,有人知道是怎么回事吗?
------解决思路----------------------
理论上说用浏览器能访问,那么用程序就能够访问,你用一个截包软件截几个包看一下,应该是你模仿浏览器模仿的不够。
例如http头里面的信息,你尽量模仿成和浏览器一样。
------解决思路----------------------
ip被禁是至少你当天是不可能在登上那个网站的,访问同一个网址,相同的内容可能是缓存的影响,不太确定。
不过我不太明白你一直访问同一个网址,你觉得有意义吗? 若是想得到网页里面的内容,可以将一次读入的 网页信息直接存起来慢慢解析就是,何必那么做呢?
要是URL 不一样的话 应该不会出现那种情况……
------解决思路----------------------
引用:
Quote: 引用:

ip被禁是至少你当天是不可能在登上那个网站的,访问同一个网址,相同的内容可能是缓存的影响,不太确定。
不过我不太明白你一直访问同一个网址,你觉得有意义吗? 若是想得到网页里面的内容,可以将一次读入的 网页信息直接存起来慢慢解析就是,何必那么做呢?
要是URL 不一样的话 应该不会出现那种情况……

我的程序大致是先提取出它某个页面的超链接,在挨个访问这些超链接抓取里面的内容,所以每次访问的url是不同的。这不会造成服务器禁止我的ip吗?


额……你的问题不好回答,因为要是无关的链接的话可能根本不是在访问同一台服务器,这要看URL的前缀,不过我猜是相关的。
正如我上次说的那样 ,要是封你的 IP 你早就不能再一次访问了,所以可以忽略屏蔽这个问题。
无论你是怎么得到的超链接,你看下廉洁是不是符合 URL 的 ,因为好多 网页中的超链接是需要特殊处理的,
如:需要添加 “http:// ” 等,你试试。我猜这个才是问题的关键。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

ip被禁是至少你当天是不可能在登上那个网站的,访问同一个网址,相同的内容可能是缓存的影响,不太确定。
不过我不太明白你一直访问同一个网址,你觉得有意义吗? 若是想得到网页里面的内容,可以将一次读入的 网页信息直接存起来慢慢解析就是,何必那么做呢?
要是URL 不一样的话 应该不会出现那种情况……

我的程序大致是先提取出它某个页面的超链接,在挨个访问这些超链接抓取里面的内容,所以每次访问的url是不同的。这不会造成服务器禁止我的ip吗?


额……你的问题不好回答,因为要是无关的链接的话可能根本不是在访问同一台服务器,这要看URL的前缀,不过我猜是相关的。
正如我上次说的那样 ,要是封你的 IP 你早就不能再一次访问了,所以可以忽略屏蔽这个问题。
无论你是怎么得到的超链接,你看下廉洁是不是符合 URL 的 ,因为好多 网页中的超链接是需要特殊处理的,
如:需要添加 “http:// ” 等,你试试。我猜这个才是问题的关键。

不是url写法的问题,我看了一下他返回的html内容,它说我是机器人。。。还是被屏蔽了


 htCon.addRequestProperty("baiduspider User-Agent", "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");
这个加 baiduspider 干嘛? 你自己写的代码? 去掉试试。没见过那种写法,你 或者可以把请求头补充全,可能更好。
  相关解决方案