下面是源代碼,希望可以幫到你~~
10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有老邊免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
package com.ly.mainprocess;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Consts;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class Test1 {
public static void main(String[] args){
Test1 test1 = new Test1();
System.out.println(test1.process("******","******"));
}
@SuppressWarnings("deprecation")
public boolean process(String username,String password) {
boolean ret=false;
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget;
HttpResponse response;
HttpEntity entity;
ListCookie cookies;
//組建登錄的post包
HttpPost httppost = new HttpPost(""); // 用戶登錄
ListNameValuePair nvps = new ArrayListNameValuePair();
nvps.add(new BasicNameValuePair("nickname", username));
nvps.add(new BasicNameValuePair("password", password));
nvps.add(new BasicNameValuePair("origURL", ""));
nvps.add(new BasicNameValuePair("loginregFrom", "index"));
nvps.add(new BasicNameValuePair("ss", "10101"));
httppost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));
httppost.addHeader("Referer", "");
httppost.addHeader("Connection", "keep-alive");
httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
httppost.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
httppost.addHeader("Origin", "");
httppost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");
response = httpclient.execute(httppost);
entity = response.getEntity();
// System.out.println("Login form get: " + response.getStatusLine());
EntityUtils.consume(entity);
// System.out.println("Post logon cookies:");
cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
// System.out.println("None");
} else {
for (int i = 0; i cookies.size(); i++) {
// System.out.println("- " + cookies.get(i).toString());
}
}
//進(jìn)行頁(yè)面跳轉(zhuǎn)
String url = ""; // 頁(yè)面跳轉(zhuǎn)
Header locationHeader = response.getFirstHeader("Location");
// System.out.println(locationHeader.getValue());
if (locationHeader != null) {
url = locationHeader.getValue(); // 得到跳轉(zhuǎn)href
HttpGet httpget1 = new HttpGet(url);
response = httpclient.execute(httpget1);
// 登陸成功。。。hoho
}
entity = response.getEntity();
// System.out.println(response.getStatusLine());
if (entity != null) {
// System.out.println("Response content length: " + entity.getContentLength());
}
// 顯示結(jié)果
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
// System.out.println(line);
}
//自動(dòng)打卡
// 訪問(wèn)網(wǎng)站的子網(wǎng)頁(yè)。
HttpPost httppost1 = new HttpPost(""); // 設(shè)置個(gè)人信息頁(yè)面
httppost1.addHeader("Content-Type", "text/plain;charset=UTF-8");
httppost1.addHeader("Accept", "text/plain, */*");
httppost1.addHeader("X-Requested-With", "XMLHttpRequest");
httppost1.addHeader("Referer", "");
response = httpclient.execute(httppost1);
entity = response.getEntity();
// System.out.println(response.getStatusLine());
if(response.getStatusLine().toString().indexOf("HTTP/1.1 200 OK")=0){
ret = true;
}
if (entity != null) {
// System.out.println("Response content length: " + entity.getContentLength());
}
// 顯示結(jié)果
reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
} finally {
httpclient.getConnectionManager().shutdown();
}
return ret;
}
}
根據(jù)java網(wǎng)絡(luò)編程相關(guān)的內(nèi)容,使用jdk提供的相關(guān)類可以得到url對(duì)應(yīng)網(wǎng)頁(yè)的html頁(yè)面代碼。
針對(duì)得到的html代碼,通過(guò)使用正則表達(dá)式即可得到我們想要的內(nèi)容。
比如,我們?nèi)绻氲玫揭粋€(gè)網(wǎng)頁(yè)上所有包括“java”關(guān)鍵字的文本內(nèi)容,就可以逐行對(duì)網(wǎng)頁(yè)代碼進(jìn)行正則表達(dá)式的匹配。最后達(dá)到去除html標(biāo)簽和不相關(guān)的內(nèi)容,只得到包括“java”這個(gè)關(guān)鍵字的內(nèi)容的效果。
從網(wǎng)頁(yè)上爬取圖片的流程和爬取內(nèi)容的流程基本相同,但是爬取圖片的步驟會(huì)多一步。
需要先用img標(biāo)簽的正則表達(dá)式匹配獲取到img標(biāo)簽,再用src屬性的正則表達(dá)式獲取這個(gè)img標(biāo)簽中的src屬性的圖片url,然后再通過(guò)緩沖輸入流對(duì)象讀取到這個(gè)圖片url的圖片信息,配合文件輸出流將讀到的圖片信息寫入到本地即可。
下面說(shuō)明知乎爬蟲的源碼和涉及主要技術(shù)點(diǎn):
(1)程序package組織
(2)模擬登錄(爬蟲主要技術(shù)點(diǎn)1)
要爬去需要登錄的網(wǎng)站數(shù)據(jù),模擬登錄是必要可少的一步,而且往往是難點(diǎn)。知乎爬蟲的模擬登錄可以做一個(gè)很好的案例。要實(shí)現(xiàn)一個(gè)網(wǎng)站的模擬登錄,需要兩大步驟是:(1)對(duì)登錄的請(qǐng)求過(guò)程進(jìn)行分析,找到登錄的關(guān)鍵請(qǐng)求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過(guò)程。
(3)網(wǎng)頁(yè)下載(爬蟲主要技術(shù)點(diǎn)2)
模擬登錄后,便可下載目標(biāo)網(wǎng)頁(yè)html了。知乎爬蟲基于HttpClient寫了一個(gè)網(wǎng)絡(luò)連接線程池,并且封裝了常用的get和post兩種網(wǎng)頁(yè)下載的方法。
(4)自動(dòng)獲取網(wǎng)頁(yè)編碼(爬蟲主要技術(shù)點(diǎn)3)
自動(dòng)獲取網(wǎng)頁(yè)編碼是確保下載網(wǎng)頁(yè)html不出現(xiàn)亂碼的前提。知乎爬蟲中提供方法可以解決絕大部分亂碼下載網(wǎng)頁(yè)亂碼問(wèn)題。
(5)網(wǎng)頁(yè)解析和提取(爬蟲主要技術(shù)點(diǎn)4)
使用Java寫爬蟲,常見的網(wǎng)頁(yè)解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來(lái)說(shuō),Jsoup就可以解決問(wèn)題,極少出現(xiàn)Jsoup不能解析和提取的情況。Jsoup強(qiáng)大功能,使得解析和提取異常簡(jiǎn)單。知乎爬蟲采用的就是Jsoup。 ...展開下面說(shuō)明知乎爬蟲的源碼和涉及主要技術(shù)點(diǎn):
(1)程序package組織
(2)模擬登錄(爬蟲主要技術(shù)點(diǎn)1)
要爬去需要登錄的網(wǎng)站數(shù)據(jù),模擬登錄是必要可少的一步,而且往往是難點(diǎn)。知乎爬蟲的模擬登錄可以做一個(gè)很好的案例。要實(shí)現(xiàn)一個(gè)網(wǎng)站的模擬登錄,需要兩大步驟是:(1)對(duì)登錄的請(qǐng)求過(guò)程進(jìn)行分析,找到登錄的關(guān)鍵請(qǐng)求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過(guò)程。
(3)網(wǎng)頁(yè)下載(爬蟲主要技術(shù)點(diǎn)2)
模擬登錄后,便可下載目標(biāo)網(wǎng)頁(yè)html了。知乎爬蟲基于HttpClient寫了一個(gè)網(wǎng)絡(luò)連接線程池,并且封裝了常用的get和post兩種網(wǎng)頁(yè)下載的方法。
(4)自動(dòng)獲取網(wǎng)頁(yè)編碼(爬蟲主要技術(shù)點(diǎn)3)
自動(dòng)獲取網(wǎng)頁(yè)編碼是確保下載網(wǎng)頁(yè)html不出現(xiàn)亂碼的前提。知乎爬蟲中提供方法可以解決絕大部分亂碼下載網(wǎng)頁(yè)亂碼問(wèn)題。
(5)網(wǎng)頁(yè)解析和提?。ㄅ老x主要技術(shù)點(diǎn)4)
使用Java寫爬蟲,常見的網(wǎng)頁(yè)解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來(lái)說(shuō),Jsoup就可以解決問(wèn)題,極少出現(xiàn)Jsoup不能解析和提取的情況。Jsoup強(qiáng)大功能,使得解析和提取異常簡(jiǎn)單。知乎爬蟲采用的就是Jsoup。
(6)正則匹配與提?。ㄅ老x主要技術(shù)點(diǎn)5)
雖然知乎爬蟲采用Jsoup來(lái)進(jìn)行網(wǎng)頁(yè)解析,但是仍然封裝了正則匹配與提取數(shù)據(jù)的方法,因?yàn)檎齽t還可以做其他的事情,如在知乎爬蟲中使用正則來(lái)進(jìn)行url地址的過(guò)濾和判斷。
(7)數(shù)據(jù)去重(爬蟲主要技術(shù)點(diǎn)6)
對(duì)于爬蟲,根據(jù)場(chǎng)景不同,可以有不同的去重方案。(1)少量數(shù)據(jù),比如幾萬(wàn)或者十幾萬(wàn)條的情況,使用Map或Set便可;(2)中量數(shù)據(jù),比如幾百萬(wàn)或者上千萬(wàn),使用BloomFilter(著名的布隆過(guò)濾器)可以解決;(3)大量數(shù)據(jù),上億或者幾十億,Redis可以解決。知乎爬蟲給出了BloomFilter的實(shí)現(xiàn),但是采用的Redis進(jìn)行去重。
(8)設(shè)計(jì)模式等Java高級(jí)編程實(shí)踐
除了以上爬蟲主要的技術(shù)點(diǎn)之外,知乎爬蟲的實(shí)現(xiàn)還涉及多種設(shè)計(jì)模式,主要有鏈模式、單例模式、組合模式等,同時(shí)還使用了Java反射。除了學(xué)習(xí)爬蟲技術(shù),這對(duì)學(xué)習(xí)設(shè)計(jì)模式和Java反射機(jī)制也是一個(gè)不錯(cuò)的案例。
4. 一些抓取結(jié)果展示收起
分享標(biāo)題:java微博爬蟲代碼 爬蟲爬取微博用戶的所有微博
本文鏈接:http://jinyejixie.com/article28/dosdccp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、小程序開發(fā)、微信小程序、全網(wǎng)營(yíng)銷推廣、外貿(mào)建站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)