更新時(shí)間:2019-09-29 13:42:56 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3894次
首先,看完這篇文章,不能保證你成為大神,但是卻可以讓你懂得什么是爬蟲,如何使用爬蟲,如何利用http協(xié)議,侵入別人的系統(tǒng),當(dāng)然只是一些簡(jiǎn)單的教程,拿到一些簡(jiǎn)單的數(shù)據(jù)。

先上代碼,在一步一步講解:
這是一個(gè)工具類,不用詳細(xì)看,網(wǎng)上哪里都能找到發(fā)送http請(qǐng)求的工具類,少包自己導(dǎo)
packagecom.df.util;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjava.net.HttpURLConnection;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.List;
importjava.util.Map;
importorg.apache.log4j.Logger;
importorg.jsoup.Connection;
importorg.jsoup.Connection.Method;
importorg.jsoup.Connection.Response;
importorg.jsoup.Jsoup;
importcom.df.controller.DFContorller;
publicclassHttpPosts{
privatefinalstaticLoggerlogger=Logger.getLogger(DFContorller.class);
publicstaticStringsendPost(Stringurl,Stringparam){
PrintWriterout=null;
BufferedReaderin=null;
Stringresult="";
try{
URLrealUrl=newURL(url);
//打開和URL之間的連接
URLConnectionconn=realUrl.openConnection();
//設(shè)置通用的請(qǐng)求屬性
conn.setRequestProperty("accept","*/*");
conn.setRequestProperty("connection","Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");
//發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
//獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流
out=newPrintWriter(conn.getOutputStream());
//發(fā)送請(qǐng)求參數(shù)
out.print(param);
//flush輸出流的緩沖
out.flush();
//定義BufferedReader輸入流來讀取URL的響應(yīng)
in=newBufferedReader(
newInputStreamReader(conn.getInputStream(),"utf-8"));
Stringline;
while((line=in.readLine())!=null){
result+=line;
}
}catch(Exceptione){
logger.info("發(fā)送POST請(qǐng)求出現(xiàn)異常!"+e);
e.printStackTrace();
}
//使用finally塊來關(guān)閉輸出流、輸入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOExceptionex){
ex.printStackTrace();
}
}
returnresult;
}
publicstaticStringsendGet(Stringurl,Stringparam){
Stringresult="";
BufferedReaderin=null;
try{
StringurlNameString=url+"?"+param;
URLrealUrl=newURL(urlNameString);
//打開和URL之間的連接
URLConnectionconnection=realUrl.openConnection();
//設(shè)置通用的請(qǐng)求屬性
connection.setRequestProperty("accept","*/*");
connection.setRequestProperty("connection","Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");
connection.setRequestProperty("Cookie","PHPSESSID=27roc4d0ccd2cg4jbht80k8km2");
//建立實(shí)際的連接
connection.connect();
//獲取所有響應(yīng)頭字段
Map<String,List<String>>map=connection.getHeaderFields();
//遍歷所有的響應(yīng)頭字段
for(Stringkey:map.keySet()){
System.out.println(key+"--->"+map.get(key));
}
//定義BufferedReader輸入流來讀取URL的響應(yīng)
in=newBufferedReader(newInputStreamReader(
connection.getInputStream(),"utf-8"));
Stringline;
while((line=in.readLine())!=null){
result+=line;
}
}catch(Exceptione){
System.out.println("發(fā)送GET請(qǐng)求出現(xiàn)異常!"+e);
e.printStackTrace();
}
//使用finally塊來關(guān)閉輸入流
finally{
try{
if(in!=null){
in.close();
}
}catch(Exceptione2){
e2.printStackTrace();
}
}
returnresult;
}
}
---------------------------------------分割線
下面進(jìn)入主題:首先你要先進(jìn)入,你要去爬取網(wǎng)站的登錄頁面,查看頁面源碼,找到登錄請(qǐng)求發(fā)送的方法名;一般來所,小型網(wǎng)站會(huì)直接寫在from表面action里面,很容易找得到,中型的網(wǎng)站就不會(huì)寫的這么直接了,找起來要費(fèi)些功夫,可能在js里面,也可能不在這個(gè)頁面,推薦使用抓包工具登陸一次,看抓到的請(qǐng)求信息,大型的網(wǎng)站,本人爬取過的京東商城后臺(tái),用游覽器自帶的f12,抓不到登錄的信息,一閃即逝,最后想了很多招才搞到京東的登錄接口;實(shí)現(xiàn)爬去;拿到了登錄接口地址后。上代碼
Stringdata=HttpPosts.sendGet(登錄地址(不帶參數(shù);String類型地址),參數(shù)(如:user_id=6853&export=112));(返回的登錄狀態(tài),一般是json格式,他會(huì)高數(shù)你是否登錄成功,有的是true,有的是1,視情況而定)選擇get還是post,模仿登錄頁面的請(qǐng)求
然后再來一個(gè)請(qǐng)求獲取cookie
Connectionconn=Jsoup.connect("登錄后頁面的地址");
conn.method(Method.GET);
conn.followRedirects(false);
Responseresponse=conn.execute();
System.out.println(response.cookies());
再講cookie動(dòng)態(tài)傳入get或者post方法里面替換到寫死的cookie;因?yàn)槭菧y(cè)試所以寫死了cookie,可以寫成動(dòng)態(tài)的;
之后再掉你要訪問登錄之后的頁面,主頁,或者是數(shù)據(jù)頁面,里面一定要攜帶cookie,和http請(qǐng)求的基本參數(shù)信息,不然一定會(huì)被攔截的。
Stringdata=HttpPosts.sendGet(登錄地址(不帶參數(shù);String類型地址),參數(shù)(如:user_id=6853&export=112));訪問方法同上;這回給你返回的就是他們的頁面了,如何你找到了對(duì)面的某個(gè)數(shù)據(jù)接口,那就可以直接訪問他,返回的就直接是數(shù)據(jù),不然你還要解析,他的頁面,很麻煩的。解析頁面一般用jsoup。
其實(shí)這個(gè)等于另類的入侵,不需要知道對(duì)方的接口文檔,用程序利用http協(xié)議直接訪問對(duì)方的服務(wù)器,
拿到你想要的東西。當(dāng)然有驗(yàn)證碼的情況下,是很難的。這是爬蟲基礎(chǔ)。只是一帶而過,講的有些片面,不到之處多多海涵。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“做Java爬蟲,有些感悟心得,分享給大家”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)