爬虫類は、それをIPプロキシを使用する必要がありますか?また、プロキシIPは非必須であると言われて、多くのユーザーは爬虫類が、IPプロキシはインチを移動しませんプロキシIPを使用する必要があると考えています。だから彼らが何を考えてその理由は何ですか?
一部のユーザーは、彼、同社の使命日はクロールクロールIPがブロックされた数百万人に一日に数千ページの何百、時には仕事とより多くの時間をクロールし、IPは、単に行うことはありません何のプロキシを自分のクローラを書きませんそこにあることは、プロキシのIPクローラはインチを移動しません。
彼らは両方彼らの視点を証明する経験で、多くの意味を言います。エッセンスクローラでは、それは、唯一ただそれほど特別な手に負えないユーザーをWebページにアクセスするユーザーでもある、この特別なユーザーに一般的には非常に歓迎のサーバーが常に見つけて無効にするには、様々な手段を使用していました。普通の人々の頻度が過剰なIPのIPアクセスは、この発見は禁止されます場合は、Webページには、すぐにではありませんアクセスするため、最も一般的なのは、あなたの訪問の頻度を決定することです。
それよりも、より大きなタスク、データ収集の一日の何百万人は、ゆっくりとタスクを完了すると、ターゲットサーバ、その後、あまりにも多くの圧力を上昇を加速するために登るとき、また、タスクを遂行することができ、IPを封印します。解決するためにのみ、プロキシIPによって、それを行う方法。ここで私は、プロキシの当社の長期使用の良い品質を使用しています、億頭の牛クラウドエージェント、およびその爬虫類剤の使用(ダイナミック転送)と、一般的なAPIモードは同じではありません。怠け者のためのシンプルでより便利にこれは間違いなく最良の選択です。
特定のコードの使用
インポートjava.io.ByteArrayOutputStreamをし、
インポートするjava.io.InputStreamを、
インポートjava.net.Authenticator;
インポートjava.net.HttpURLConnectionのザ;
インポートjava.net.InetSocketAddress;
インポートjava.net.PasswordAuthentication、
インポートjava.net .Proxy;
インポートのjava.net.URL;
輸入java.util.Randomの。
class ProxyAuthenticator extends Authenticator {
private String user, password;
public ProxyAuthenticator(String user, String password) {
this.user = user;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password.toCharArray());
}
}
/**
* 注意:下面代码仅仅实现HTTP请求链接,每一次请求都是无状态保留的,仅仅是这次请求是更换IP的,如果下次请求的IP地址会改变
* 如果是多线程访问的话,只要将下面的代码嵌入到你自己的业务逻辑里面,那么每次都会用新的IP进行访问,如果担心IP有重复,
* 自己可以维护IP的使用情况,并做校验。
*/
public class Demo {
public static void main(String args[]) throws Exception {
// 要访问的目标页面
String targetUrl = "http://httpbin.org/ip";
// 代理服务器
String proxyServer = "t.16yun.cn";
int proxyPort = 31111;
// 代理隧道验证信息
String proxyUser = "username";
String proxyPass = "password";
try {
URL url = new URL(targetUrl);
Authenticator.setDefault(new ProxyAuthenticator(proxyUser, proxyPass));
// 创建代理服务器地址对象
InetSocketAddress addr = new InetSocketAddress(proxyServer, proxyPort);
// 创建HTTP类型代理对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
// 设置通过代理访问目标页面
HttpURLConnection connection= (HttpURLConnection) url.openConnection(proxy);
// 设置Proxy-Tunnel
// Random random = new Random();
// int tunnel = random.nextInt(10000);
//connection.setRequestProperty("Proxy-Tunnel",String.valueOf(tunnel));
// 解析返回数据
byte[] response = readStream(connection.getInputStream());
System.out.println(new String(response));
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}
}
/**
* 将输入流转换成字符串
*
* @param inStream
* @return
* @throws Exception
*/
public static byte[] readStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outSteam =new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
}
}