如今在网络爬虫中,为看避免本地IP被封,许多爬虫就会使用HTTP代理IP去协助解决问题。HTTP代理也就成了爬虫中不可缺少的一部分。
1、代理
http代理就是爬虫用户通过爬虫程序向网站采集数据。而且采集数据的过程中,就需要通过http代理向目标网站发出请求从而获取相关数据。
2、代理服务器
代理服务器就是将传输的客户端数据请求通过代理服务器转发到其他服务器当中。代理服务器就相当于客户端与服务器之间的中间商。
3、隧道代理
(隧道IP):客户计算机通过专线网络链接固定代理服务器(固定IP),固定服务器再通过随机端口将数据通过其他线路服务器向目标网站(服务器)转发。因此目标网站(服务器)只能看到随机线路的IP,不可能看到固定代理服务器IP,实际效果与公网IP(外网IP)一样,并且网络更加稳定。
4、使用爬虫隧道IP的代码demo
import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod; import java.io.IOException; public class Main { # 代理服务器(产品官网 www.16yun.cn) private static final String PROXY_HOST = "t.16yun.cn"; private static final int PROXY_PORT = 31111; public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod("https://httpbin.org/ip"); HostConfiguration config = client.getHostConfiguration(); config.setProxy(PROXY_HOST, PROXY_PORT); client.getParams().setAuthenticationPreemptive(true); String username = "16ABCCKJ"; String password = "712323"; Credentials credentials = new UsernamePasswordCredentials(username, password); AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT); client.getState().setProxyCredentials(authScope, credentials); try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { String response = method.getResponseBodyAsString(); System.out.println("Response = " + response); } } catch (IOException e) { e.printStackTrace(); } finally { method.releaseConnection(); } } }
无论你爬虫多么厉害,对目标网站的反爬虫策略研究得如何透彻,但始终避免不了一个这样的事实:没有大量优质代理IP,爬虫工作真的没办法高效地进行下去!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/53486.html