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