我想用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 不一样的话 应该不会出现那种情况……
------解决思路----------------------
额……你的问题不好回答,因为要是无关的链接的话可能根本不是在访问同一台服务器,这要看URL的前缀,不过我猜是相关的。
正如我上次说的那样 ,要是封你的 IP 你早就不能再一次访问了,所以可以忽略屏蔽这个问题。
无论你是怎么得到的超链接,你看下廉洁是不是符合 URL 的 ,因为好多 网页中的超链接是需要特殊处理的,
如:需要添加 “http:// ” 等,你试试。我猜这个才是问题的关键。
------解决思路----------------------
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 干嘛? 你自己写的代码? 去掉试试。没见过那种写法,你 或者可以把请求头补充全,可能更好。