1. 程式人生 > >【網路爬蟲】使用HttpClient4.3.5抓取資料

【網路爬蟲】使用HttpClient4.3.5抓取資料

使用jar——Apache client

程式碼結構:

這裡寫圖片描述

具體程式碼:

抓取結果封裝

/**
 *  抓取結果的封裝
 * @author tsj-pc
 *
 */
public class CrawlResultPojo {
    private boolean isSuccess;
    private String pageContent;
    private int httpStatuCode;

    public boolean isSuccess() {
        return isSuccess;
    }
    @Override
    public
String toString() { return "CrawlResultPojo [httpStatuCode=" + httpStatuCode + ", isSuccess=" + isSuccess + ", pageContent=" + pageContent + "]"; } public void setSuccess(boolean isSuccess) { this.isSuccess = isSuccess; } public String getPageContent
() { return pageContent; } public void setPageContent(String pageContent) { this.pageContent = pageContent; } public int getHttpStatuCode() { return httpStatuCode; } public void setHttpStatuCode(int httpStatuCode) { this.httpStatuCode = httpStatuCode; } }

RUL任務的POJO類

/**
 * url任務的pojo類
 * @author tsj-pc
 *
 */
public class UrlPojo {
    private Map<String, Object> parasMap;

    public Map<String, Object> getParasMap() {
        return parasMap;
    }

    public void setParasMap(Map<String, Object> parasMap) {
        this.parasMap = parasMap;
    }

    public UrlPojo(String url) {
        this.url = url;
    }

    public UrlPojo(String url, Map<String, Object> parasMap) {
        this.url = url;
        this.parasMap = parasMap;
    }

    @Override
    public String toString() {
        return "UrlPojo [taskLevel=" + taskLevel + ", url=" + url + "]";
    }

    public UrlPojo(String url, TaskLevel taskLevel) {
        this.url = url;
        this.taskLevel = taskLevel;
    }

    private String url;
    private TaskLevel taskLevel = TaskLevel.MIDDLE;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public TaskLevel getTaskLevel() {
        return taskLevel;
    }

    public void setTaskLevel(TaskLevel taskLevel) {
        this.taskLevel = taskLevel;
    }

    public HttpURLConnection getConnection() {
        try {
            URL url = new URL(this.url);
            URLConnection connection = url.openConnection();
            if (connection instanceof HttpURLConnection) {
                return (HttpURLConnection) connection;
            } else {
                throw new Exception("connection is errr!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getHost() {
        try {
            URL url = new URL(this.url);
            return url.getHost();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

使用HttpClient4.3.5抓取資料

public class HttpClientCrawlerImpl implements ICrawler {
    //當CloseableHttpClient不再需要,並且不再連線管理的範圍,需要呼叫CloseableHttpClient.close()方法將其關閉
    public CloseableHttpClient httpclient = HttpClients.custom().build();

    @Override
    public CrawlResultPojo crawl(UrlPojo urlPojo) {
        if (urlPojo == null) {
            return null;
        }
        CrawlResultPojo crawlResultPojo = new CrawlResultPojo();
        CloseableHttpResponse response1 = null;
        BufferedReader br = null;
        try {
            HttpGet httpget = new HttpGet(urlPojo.getUrl());
            response1 = httpclient.execute(httpget);
            HttpEntity entity = response1.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.setSuccess(true);
            crawlResultPojo.setPageContent(stringBuilder.toString());
            return crawlResultPojo;
        } catch (Exception e) {
            e.printStackTrace();
            crawlResultPojo.setSuccess(false);
        } finally {
            if (response1 != null) {
                try {
                    response1.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }

        return crawlResultPojo;
    }

    /**
     * 傳入加入引數post引數的url pojo
     */
    public CrawlResultPojo crawl4Post(UrlPojo urlPojo) {
        if (urlPojo == null) {
            return null;
        }
        CrawlResultPojo crawlResultPojo = new CrawlResultPojo();
        CloseableHttpResponse response1 = null;
        BufferedReader br = null;
        try {
            RequestBuilder rb = RequestBuilder.post().setUri(
                    new URI(urlPojo.getUrl()));
            ;
            // .addParameter("IDToken1",
            // "username").addParameter("IDToken2", "password").build();

            Map<String, Object> parasMap = urlPojo.getParasMap();
            if (parasMap != null) {
                for (Entry<String, Object> entry : parasMap.entrySet()) {
                    rb
                            .addParameter(entry.getKey(), entry.getValue()
                                    .toString());
                }
            }
            HttpUriRequest httpRequest = rb.build();
            response1 = httpclient.execute(httpRequest);
            HttpEntity entity = response1.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.setSuccess(true);
            crawlResultPojo.setPageContent(stringBuilder.toString());
            return crawlResultPojo;
        } catch (Exception e) {
            e.printStackTrace();
            crawlResultPojo.setSuccess(false);
        } finally {
            if (response1 != null) {
                try {
                    response1.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }

        return crawlResultPojo;
    }

    public static void main(String[] args) throws Exception {
        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);

        if (resultPojo != null) {
            System.out.println(resultPojo);
        }
    }
}

結果:

這裡寫圖片描述

相關推薦

網路爬蟲使用HttpClient4.3.5資料

使用jar——Apache client 程式碼結構: 具體程式碼: 抓取結果封裝 /** * 抓取結果的封裝 * @author tsj-pc * */ public class CrawlResultPojo { pri

網路爬蟲java微博爬蟲(二):如何HTML頁面及HttpClient使用

一、寫在前面         上篇文章以網易微博爬蟲為例,給出了一個很簡單的微博爬蟲的爬取過程,大概說明了網路爬蟲其實也就這麼回事,或許初次看到這個例子覺得有些複雜,不過沒有關係,上篇文章給的例子只是讓大家對爬蟲過程有所瞭解。接下來的系列裡,將一步一步地剖析每個過程。 現

紫書例題3-5 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

暴力 真的 mes sed stream 簡單 post flag 個數 【題目描述】 如果x加上x的各個數字之和得到y,就說x是y的生成元。給出n(1≤n≤100000),求最小生成元。無解輸出0。例如,n=216,121,2005時的解分別為198,0,1979。 【代

網路爬蟲:Python:url基礎:urllib

文章目錄 1 簡單介紹 2 相關區別 3 例項講解 (1)urllib (2)ulrlib2 (3)httplib (4)requests 4 專案實戰 1 簡單介紹

網路爬蟲豆瓣電影Top250評論

前言 本爬蟲大致流程為: (1)分析網頁——分析網站結構 (2)傳送請求——通過requests傳送請求 (3)響應請求——得到請求響應的頁面 (4)解析響應——分析頁面,得到想要的資料 (5)儲存文字——以txt格式儲存 使用環境 anaconda3 pyt

網路爬蟲java微博爬蟲(四):資料處理——jsoup工具解析html、dom4j讀寫xml

        之前提到過,對於簡單的網頁結構解析,可以直接通過觀察法、手工寫正則解析,可以做出來,比如網易微博。但是對於結構稍微複雜點的,比如新浪微博,如果還用正則,用眼睛一個個去找,未免太麻煩了。         本文介紹兩個工具包:解析html, xml的jsoup,

Python爬蟲從html裏爬中國大學排名

ext 排名 所有 一個 requests 空格 創建 .text request from bs4 import BeautifulSoupimport requestsimport bs4 #bs4.element.Tag時用的上#獲取網頁頁面HTMLdef

入門須知之網路爬蟲的基本流程及策略

大資料時代下,資料採集推動著資料分析,資料分析推動發展。但是在這個過程中會出現很多問題。拿最簡單最基礎的爬蟲採集資料為例,過程中就會面臨,IP被封,爬取受限、違法操作等多種問題,所以在爬去資料之前,一定要了解好預爬網站是否涉及違法操作,找到合適的代理IP訪問網站等一系列問題。 掌握爬蟲技術也成為現在技術流的

[Python]網路爬蟲(一):網頁的含義和URL基本構成

一、網路爬蟲的定義 網路爬蟲,即Web Spider,是一個很形象的名字。 把網際網路比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。 網路蜘蛛是通過網頁的連結地址來尋找網頁的。 從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它連結地址

python網路爬蟲(五):併發

在進行單個爬蟲抓取的時候,我們不可能按照一次抓取一個url的方式進行網頁抓取,這樣效率低,也浪費了cpu的資源。目前python上面進行併發抓取的實現方式主要有以下幾種:程序,執行緒,協程。程序不在的討論範圍之內,一般來說,程序是用來開啟多個spider,比如我

安全工具瀏覽器下Burpsuitehttps資料

What 很多人一直在困擾的Burpsuite配置問題,請認真反問下自己以下問題(ps: 都100%確定的話就不用繼續往下看了,免得waste time…): burp的代理選擇地址是否正確? 代理外掛是否禁用?(其實不用禁用,可以往下看) 證書

網路爬蟲基本工作流程和策略

         網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。   網路爬蟲是捜索引擎抓取系統的重要組成部分

python3實現網路爬蟲(1)--urlopen網頁的html

準備開始寫一些python3關於爬蟲相關的東西,主要是一些簡單的網頁爬取,給身邊的同學入門看。 首先我們向網路伺服器傳送GET請求以獲取具體的網頁,再從網頁中讀取HTML內容。        我們大家平時都使用網路瀏覽器,並且它已經成為我們上網不可或缺的軟體。它建立資訊的資

Python網路爬蟲Python維基百科網頁(BeautifulSoup+Urllib2)

引言: 從網路提取資料的需求和重要性正在變得越來越迫切。 每隔幾個星期,我都會發現自己需要從網路中提取資料。 例如,上週我們正在考慮建立一個關於網際網路上可用的各種資料科學課程的熱度和情緒指數。 這不僅需要找到新的課程,而且還要抓住網路的評論,然後在

PHP爬蟲curl+simple_html_dom 百度最新消息新聞標題,來源,URL

work getc spec 標題 hasattr url format protect include <title>新聞轉載統計</title> <script> function submit(){ wd=d

51Nod - 1010只包含因子2 3 5的數

題目: K的因子中只包含2 3 5。滿足條件的前10個數是:2,3,4,5,6,8,9,10,12,15。 所有這樣的K組成了一個序列S,現在給出一個數n,求S中 >= 給定數的最小的數。 例如:n = 13,S中 >= 13的最小的數是15,所以輸出15。 Inpu

AI系列<3>生成神經網路以及初始化詳細過程

內容簡介 本文將會介紹神經網路的生成過程,通過生成一個[2, 5, 3, 1]的神經網路,詳細講解每一步驟的運算過程。[2, 5, 3, 1] 表示:兩個輸入,第一層 5各神經元,第二層3個神經元,第三層 1個神經元。 生成輸入資料 np.random.s

程式碼審計大米CMS_V5.5.3 後臺多處儲存型XSS漏洞分析

  0x00 環境準備 大米CMS官網:http://www.damicms.com 網站原始碼版本:大米CMS_V5.5.3試用版(更新時間:2017-04-15) 程式原始碼下載:http://www.damicms.com/downes/dami.rar 測試網站首頁:  

程式碼審計大米CMS_V5.5.3 目錄遍歷漏洞分析

  0x00 環境準備 大米CMS官網:http://www.damicms.com 網站原始碼版本:大米CMS_V5.5.3試用版(更新時間:2017-04-15) 程式原始碼下載:http://www.damicms.com/downes/dami.rar 測試網站首頁:  

程式碼審計大米CMS_V5.5.3 任意檔案讀取漏洞分析

  0x00 環境準備 大米CMS官網:http://www.damicms.com 網站原始碼版本:大米CMS_V5.5.3試用版(更新時間:2017-04-15) 程式原始碼下載:http://www.damicms.com/downes/dami.rar 測試網站首頁: