Java可以像Python一樣方便爬去世間萬物
阿新 • • 發佈:2018-11-04
前言:
- 之前在大二的時候,接觸到了Python語言,主要是接觸Python爬蟲那一塊
- 比如我們常用的requests,re,beautifulsoup庫等等
- 當時為了清理資料和效率,還專門學了正則表示式,異常的佩服自己哈哈哈哈哈
- 最近閒著無事幹,秉承是Java是世界上最好的語言,Python能幹,為啥Java不行
- 說剛就剛,以下以兩個小例子還說明Java做爬蟲一樣可以像Python哪樣方便
技術:
- SpringBoot
- HttpClient
- Jsoup
- HttpClientUtil
- 等
貼吧一鍵簽到:
- 我們要知道,不管是你訪問一個頁面,還是登入註冊
- 本質就是傳送Http請求
- Http請求大致有四種
- Get
- Post
- Delete
- Put
- 我們常用的也就是兩種Get請求獲取頁面資源
- Post請求傳送資料
- 所以我們的思路如下:
- 向某個URL傳送GET請求,獲取HTML頁面
- 用正則或者第三方工具清理資料
- 獲得資料以後在進行後續操作
- 比如在GET請求
- 或者直接存到資料庫中怎麼樣的
1. 獲取HTML頁面:
1 public void execute(String username) {2 // 獲取cookie 3 String cookie = getCookie(username); 4 // 獲取首頁html內容 5 String content = http.get("http://tieba.baidu.com/mo/", cookie); 6 // 獲取所有連線 7 String links = getMore(content); 8 links = "http://tieba.baidu.com" + links; 9 // 獲取所有貼吧html內容10 content = http.get(links, cookie); 11 List<String> likesLink = getLike(content); 12 sign(likesLink, cookie, username); 13 }
我們用第三方工具包 HttpClientUtil 可以直接傳送Get請求(已經封裝好的)
2.清理資料:
1 private void sign(List<String> likesLink, String cookie, String username) { 2 for (String link : likesLink) { 3 String content = http.get(link, cookie); 4 Document doc = Jsoup.parse(content); 5 Elements titles = doc.getElementsByClass("bc"); 6 String title = titles.get(0).text(); 7 title = title.split("吧")[0]; 8 Elements links = doc.select("a[href]"); 9 boolean flag = true; 10 for (Element ele : links) { 11 String ss = ele.attr("href"); 12 ss = "http://tieba.baidu.com" + ss; 13 if (ss.contains("sign")) { 14 http.get(ss, cookie); 15 // 插入到資料庫中 16 String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); 17 dao.insertRecord(username, title, date, "簽到成功"); 18 flag = false; 19 break; 20 } 21 } 22 if (flag) { 23 // 插入到資料庫中 24 String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); 25 dao.insertRecord(username, title, date, "已簽到"); 26 } 27 } 28 }
我們這裡用的第三方工具 Jsoup, Jsoup可以像DOM一樣簡單的獲取任何東西。甚至你可以用這個則來進行獲取。
專案原始碼:貼吧一鍵簽到
專案地址:貼吧一鍵簽到
爬取天涯房價的帖子:
1. 獲取HTML地址:
1 public List<String> getContent() { 2 3 List<String> res = new ArrayList<>(); 4 // 92是固定的,帖子的總數 5 for (int i = 1; i <= 92; i++) { 6 String url = getUrl(i); 7 String content = http.get(url); 8 getParse(content, res); 9 } 10 return res; 11 }
2.清理資料:
1 private void getParse(String content, List<String> res) { 2 3 Document doc = Jsoup.parse(content); 4 Elements links = doc.getElementsByClass("bd"); 5 for (Element link : links) { 6 String str = link.toString(); 7 Pattern pattern = Pattern.compile("<p>[.\\s\\S]+?div"); 8 Matcher m = pattern.matcher(str); 9 while (m.find()) { 10 String s = m.group(); 11 s = s.replaceAll("<", ""); 12 s = s.replaceAll(">", ""); 13 s = s.replaceAll("/", ""); 14 s = s.replaceAll("p", ""); 15 s = s.replaceAll("div", ""); 16 s = s.replaceAll("\n", ""); 17 res.add(s); 18 } 19 } 20 }
專案原始碼:天涯社群帖子
總結:
用Java做爬蟲,無非兩點
- 獲取HTML
- 清理頁面
當我們這兩點都會的時候,那麼就十分的簡單了。當然這裡也用到了第三方的開源jar包
- 獲取HTML => HttpClient
- 清理資料 => Jsoup
ps. 如果你對爬蟲也感興趣,我之前寫過一個爬知乎圖片的爬蟲 前方高能
可以自己爬下來,慢慢欣賞,不用謝我