java微博爬蟲代碼 爬蟲爬取微博用戶的所有微博

用java編寫網(wǎng)絡(luò)爬蟲,用來爬網(wǎng)絡(luò)音樂資源,再返回java頁(yè)面顯示該怎么實(shí)現(xiàn)

下面是源代碼,希望可以幫到你~~

10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(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ǎ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;

}

}

java爬蟲抓取指定數(shù)據(jù)

根據(jù)java網(wǎng)絡(luò)編程相關(guān)的內(nèi)容,使用jdk提供的相關(guān)類可以得到url對(duì)應(yīng)網(wǎng)頁(yè)的html頁(yè)面代碼。

針對(duì)得到的html代碼,通過使用正則表達(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,然后再通過緩沖輸入流對(duì)象讀取到這個(gè)圖片url的圖片信息,配合文件輸出流將讀到的圖片信息寫入到本地即可。

java如何做高級(jí)爬蟲

下面說明知乎爬蟲的源碼和涉及主要技術(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)求過程進(jìn)行分析,找到登錄的關(guān)鍵請(qǐng)求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過程。

(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è)亂碼問題。

(5)網(wǎng)頁(yè)解析和提?。ㄅ老x主要技術(shù)點(diǎn)4)

使用Java寫爬蟲,常見的網(wǎng)頁(yè)解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來說,Jsoup就可以解決問題,極少出現(xiàn)Jsoup不能解析和提取的情況。Jsoup強(qiáng)大功能,使得解析和提取異常簡(jiǎn)單。知乎爬蟲采用的就是Jsoup。 ...展開下面說明知乎爬蟲的源碼和涉及主要技術(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)求過程進(jìn)行分析,找到登錄的關(guān)鍵請(qǐng)求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過程。

(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è)亂碼問題。

(5)網(wǎng)頁(yè)解析和提?。ㄅ老x主要技術(shù)點(diǎn)4)

使用Java寫爬蟲,常見的網(wǎng)頁(yè)解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來說,Jsoup就可以解決問題,極少出現(xiàn)Jsoup不能解析和提取的情況。Jsoup強(qiáng)大功能,使得解析和提取異常簡(jiǎn)單。知乎爬蟲采用的就是Jsoup。

(6)正則匹配與提?。ㄅ老x主要技術(shù)點(diǎn)5)

雖然知乎爬蟲采用Jsoup來進(jìn)行網(wǎng)頁(yè)解析,但是仍然封裝了正則匹配與提取數(shù)據(jù)的方法,因?yàn)檎齽t還可以做其他的事情,如在知乎爬蟲中使用正則來進(jìn)行url地址的過濾和判斷。

(7)數(shù)據(jù)去重(爬蟲主要技術(shù)點(diǎn)6)

對(duì)于爬蟲,根據(jù)場(chǎng)景不同,可以有不同的去重方案。(1)少量數(shù)據(jù),比如幾萬或者十幾萬條的情況,使用Map或Set便可;(2)中量數(shù)據(jù),比如幾百萬或者上千萬,使用BloomFilter(著名的布隆過濾器)可以解決;(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://muchs.cn/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í)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司