最近由於工作的需要,獨自開始研究爬蟲爬取互聯網數據,經過一段時間的探究,踩過許多坑,也學習到了許多以往不知道的知識。在這里總結一下經驗,順便分享給大家,希望可以幫助到有需要的朋友,當然如果有爬蟲大佬能夠不吝賜教那就更好啦。
大部分人都是使用的python來實現爬蟲的,因為自己學的是java,也沒更多時間去學習新的語言了,所以還是選擇了用java來實現。本篇爬蟲技術分享是用java來實現了爬取百度的搜索結果 ,java的使用如下:
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(); } } }
在學習的過程中我也遇到了一些網站的反爬機制,像User-Agent限制,限制IP訪問次數,還有驗證碼等。這些反爬機制比較簡單解決的也有很難解決的,像限制ip訪問我們可以直接通過購買高質量代理ip來解決。比如示例里面使用的億牛雲爬蟲代理。難度大就需要更深入的學習才能解決了。
若有收獲,就點個贊吧