1. 程式人生 > >Java可以像Python一樣方便爬去世間萬物

Java可以像Python一樣方便爬去世間萬物

前言:

  • 之前在大二的時候,接觸到了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.  如果你對爬蟲也感興趣,我之前寫過一個爬知乎圖片的爬蟲  前方高能

 

  

   女生們被關注腿是什麼感受?

   做一個可愛的女孩子是一種什麼體驗?

   怎樣搭配才能顯得腿長?

   平常人可以漂亮到什麼程度?

 

  可以自己爬下來,慢慢欣賞,不用謝我