1. 程式人生 > >java爬蟲之基於httpclient的簡單Demo(二)

java爬蟲之基於httpclient的簡單Demo(二)

延續demo1的 java爬蟲的2種爬取方式(HTTP||Socket)簡單Demo(一),demo2出爐啦,大家想學爬蟲都可以從這個網盤學習哦:https://pan.baidu.com/s/1pJJrcqJ#list/path=%2F

免費課程,非常不錯。其實還是主要學習一個httpclient,httpclient全是英文文件,看的我心累啊

package com.simple.crawImpl;

import com.simple.Icrawl.ICrawl;
import com.simple.pojos.CrawlResultPojo;
import com.simple.pojos.UrlPojo;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

/**
 *
 * Created by lewis on 2016/10/16.
 */
public class HttpClientCrawlerImpl implements ICrawl{

    public CloseableHttpClient httpClient = HttpClients.custom().build();           //建立定製HttpClient
    @Override
    public CrawlResultPojo crawl(UrlPojo urlpojo) {

        if(urlpojo==null){
            return null;
        }
        CrawlResultPojo crawlResultPojo = new CrawlResultPojo();                //結果集
        CloseableHttpResponse response = null;                                  //HTTP返回的各種資訊集合,包含協議http標準,httpcode狀態碼
        BufferedReader br = null;                                               //

        try {
            HttpGet httpGet = new HttpGet(urlpojo.getUrl());
            response = httpClient.execute(httpGet);
            HttpEntity entity = response.getEntity();                                       //獲取輸入流
            InputStreamReader isr = new InputStreamReader(entity.getContent(),"utf-8");     //位元組流轉化為字元流,設定編碼
            br =new BufferedReader(isr);

            String line =null;
            StringBuilder context = new StringBuilder();

            while((line=br.readLine())!=null){
                context.append(line+"\n");
            }

            crawlResultPojo.setSuccess(true);
            crawlResultPojo.setPageContent(context.toString());

            return crawlResultPojo;

        } catch (IOException e) {
            e.printStackTrace();
            crawlResultPojo.setSuccess(false);
        }finally {
            try {
                if (br!=null)
                    br.close();                                                                 //關閉流
                if(response!=null)
                    response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return crawlResultPojo;
    }

    /**
     * 帶引數post的urlpojo
     * */
    public CrawlResultPojo crawl4Post(UrlPojo urlPojo){
        if(urlPojo==null||urlPojo.getUrl()==null){
            return null;
        }

        CrawlResultPojo crawlResultPojo = new CrawlResultPojo();
        BufferedReader br= null;

        try {

            RequestBuilder rb = RequestBuilder.post().setUri(new URI(urlPojo.getUrl()));
            Map<String,Object> parasMap = urlPojo.getParasMap() ;
            if(parasMap!=null){
                for(Entry<String,Object> entry:parasMap.entrySet()){
                    rb.addParameter(entry.getKey(),entry.getValue().toString());
                }
            }
            HttpUriRequest httpUriRequest = rb.build();
            HttpEntity entity =httpClient.execute(httpUriRequest).getEntity();
            InputStreamReader isr=new InputStreamReader(entity.getContent(),"utf-8");
            br = new BufferedReader(isr);

            String line = null;
            StringBuilder stringBuilder = new StringBuilder();

            while((line=br.readLine())!=null){
                stringBuilder.append(line+"\n");
            }

            crawlResultPojo.setPageContent(stringBuilder.toString());
            crawlResultPojo.setSuccess(true);

            return crawlResultPojo;
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(br!=null)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        crawlResultPojo.setSuccess(false);
        return crawlResultPojo;
    }

    public static void main(String []args){

        HttpClientCrawlerImpl httpClientCrawlerImpl = new HttpClientCrawlerImpl();
        String url = "http://www.wangdaizhijia.com/front_select-plat";
        UrlPojo urlPojo = new UrlPojo(url);
        Map<String, Object> parasMap = new HashMap<String, Object>();

        int max_page_number = 1000;

        parasMap.put("currPage", 30);
        parasMap.put("params", "");
        parasMap.put("sort", 0);
        urlPojo.setParasMap(parasMap);

        CrawlResultPojo resultPojo = httpClientCrawlerImpl.crawl4Post(urlPojo);
        print(resultPojo);
        resultPojo=httpClientCrawlerImpl.crawl(urlPojo);
        print(resultPojo);
    }

    public static void print(Object s){
        System.out.println(s);
    }

}


相關推薦

java爬蟲基於httpclient簡單Demo()

延續demo1的 java爬蟲的2種爬取方式(HTTP||Socket)簡單Demo(一),demo2出爐啦,大家想學爬蟲都可以從這個網盤學習哦:https://pan.baidu.com/s/1pJJrcqJ#list/path=%2F 免費課程,非常不錯。其實還是主要學

一起學Netty(十 Netty心跳簡單Demo

前面簡單地瞭解了一下IdleStateHandler,我們現在寫一個簡單的心跳demo: 1)伺服器端每隔5秒檢測伺服器端的讀超時,如果5秒沒有接受到客戶端的寫請求,也就說伺服器端5秒沒有收到讀事件,則視為一次超時 2)如果超時二次則說明連線處於不活躍的狀態,關閉Serve

Java爬蟲學習:利用HttpClient和Jsoup庫實現簡單Java爬蟲程式

利用HttpClient和Jsoup庫實現簡單的Java爬蟲程式 HttpClient簡介 HttpClient是Apache Jakarta Common下的子專案,可以用來提供高效的、最新的、功能豐富的支援HTTP協議的客戶端程式設計工具包,並且它支

JAVA 爬蟲httpclient post請求提交表單獲取Ajax資料

public static String httpPostWithJSON(String url) throws Exception { HttpPost httpPost = n

Java SE正則表達式:匹配

one 表達式 hone 163郵箱 pattern div lte true main package demo.regex; import java.util.regex.Pattern; /* 正則表達式:匹配 */ public class RegexMat

小白的java學習路 “ 選擇結構()”

pre ring 問題 -s stat 適合 static 之路 span switch 選擇結構: 為什麽使用switch選擇結構: switch選擇結構可以更好地解決等值判斷問題。 switch選擇結構的四個關鍵字: switch case default

Java爬蟲下載全世界國家的國旗圖片

stack [] trac node edr string類型 微信公眾號 public 過程 介紹 ??本篇博客將繼續上一篇博客:Python爬蟲之使用Fiddler+Postman+Python的requests模塊爬取各國國旗 的內容,將用Java來實現這個爬蟲,下載

java爬蟲入門基礎 java讀取txt檔案,對字串進行操作後匯出txt檔案

相比於C#,java爬蟲,python爬蟲更為方便簡要,首先呢,python的urllib2包提供了較為完整的訪問網頁文件的API,再者呢對於摘下來的文章,python的beautifulsoap提供了簡潔的文件處理功能,這就成就了他爬蟲的優勢。 作為一名滿腦子要成為一名大牛的程式設計師小白來講,倒不是非要

java學習—實現一個簡單的ArrayList

package thread1; /** * 實現一個簡單的ArrayList * * @Title: uminton */ public class SimpleArrayList<T> { //陣列中元素的大小 private Intege

java爬蟲-0020,httpclient獲取原始碼

1、匯入httpclient依賴 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>

教老婆學Java 系列奇妙的資料結構

奇妙的資料結構(容器)二 陣列與集合 問題:如何將多個數組放入到一個集合中。 如何將多個人陣列放入到一個集合中,沒有重複的資料。 package Day03; import java.lang.reflect.Array; import java.util.A

[Java爬蟲] 使用 Jsoup + HttpClient 爬取網頁圖片

一、前言 把一篇圖文並茂的優秀文章全部爬取下來,就少不了 Java 爬蟲裡邊的 圖片爬取 技術了。很多人都用來爬取美女圖片,但是筆者覺得這有傷大雅。下面筆者使用它來爬取 CSDN 【今日推薦】文章附帶的圖片 二、程式碼、依賴 筆者對本程式碼經過多次

java爬蟲:jsoup的簡單案例

package jsoup;import java.io.IOException;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.

java爬蟲 京東商品頁 簡單案例

要爬的資料 資料庫表結構 資料庫建表語句SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `spider` -- ---------------------------- DROP TABLE I

學習java Swing程式設計的一個簡單Demo

 import java.lang.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class SwingComponent {  //建立窗體,JFrame   J

.Net轉Java自學路—Mybatis框架篇(SqlSession、原始開發、代理開發)

bat 包裝 version 輸出結果 except 方法註入 用戶 eas 同名 SqlSession範圍:   1、SqlSessionFactoryBuilder:通過SqlSessionFactoryBuilder創建會話工廠SqlSessionFactory。 

Java併發AQS原始碼分析(

我在Java併發之AQS原始碼分析(一)這篇文章中,從原始碼的角度深度剖析了 AQS 獨佔鎖模式下的獲取鎖與釋放鎖的邏輯,如果你把

Java安全Commons Collections1分析(

# Java安全之Commons Collections1分析(二) ## 0x00 前言 續上篇文,繼續除錯cc鏈。在上篇文章除錯的cc鏈其實並不是一個完整的鏈。只是使用了幾個方法的的互相呼叫彈出一個計算器。 [Java安全之Commons Collections1分析(一)](https://www

Java基於httpclient獲取網頁資料,實現簡單網路爬蟲

1、pom檔案引入httpclient依賴     <dependency>             <groupId>org.apache.httpcompon

Java爬蟲技術HttpClient學習筆記

結果 小爬蟲 如果 依賴包 很多 tac world 官方 靈活 第一節、HttpClient 一、HttpClient 簡介 超文本傳輸協議【The Hyper-Text Transfer Protocol (HTTP)】是當今互聯網上使用的最重要(significan