style="display:none"
屬性來達到混淆的目的,也就是包含這個屬性的標籤是不會顯示在頁面上的。知道了這一點就比較好處理了,只須要在解析的時候把包含style="display:none"
屬性的標籤去掉。就能夠輕鬆的拿到ip和port數據了。1 package com.cnblogs.wycm; 2 3 import org.jsoup.Jsoup; 4 import org.jsoup.nodes.Document; 5 import org.jsoup.nodes.Element; 6 import org.jsoup.select.Elements; 7 import java.io.IOException; 8 import java.net.URL; 9 10 /** 11 * 12 * 數據的解析採用的是Jsoup框架,Jsoup是一個操做HTML標籤的Java庫,它提供了很是方便的API來提取和操縱庫,支持相似jquery的選擇器來查找標籤。 13 * 因爲請求比較單一,這裏的網絡請求並無採用上一篇所使用HttpClient框架。直接經過Jsoup來執行http請求的。 14 * 關於Jsoup的使用能夠參考http://www.open-open.com/jsoup/ 15 * 16 */ 17 public class Chapter1 { 18 public static void main(String[] args) throws IOException { 19 Document document= Jsoup.parse(new URL("http://www.goubanjia.com/"), 10000); 20 //獲取class='table'的table的全部子節點tr 21 Elements elements = document.select("table[class=table] tr"); 22 for (int i = 1; i < elements.size(); i++){ 23 //獲取td節點 24 Element td = elements.get(i).select("td").first(); 25 /** 26 * 查找全部style屬性包含none字符串的標籤(頁面上未顯示的標籤),並移除 27 * 包括如下兩種 28 * style=display: none; 29 * style=display:none; 30 */ 31 for(Element none : td.select("[style*=none;]")){ 32 none.remove(); 33 } 34 //移除空格 35 String ipPort = td.text().replaceAll(" ", ""); 36 //打印 37 System.out.println(ipPort); 38 } 39 } 40 } 41 /* 42 第一次運行打印結果: 43 183.129.246.228:8132 44 222.92.136.206:8987 45 54.238.186.100:8988 46 ... 47 第二次運行打印結果: 48 183.129.246.228:8377 49 222.92.136.206:9059 50 54.238.186.100:8622 51 ... 52 */
td
節點->Break on...->subtree modifications。這兩個步驟就是在設置斷點調試,也就是在td節點發生改變的時候paused。1 var _$ = ['\x2e\x70\x6f\x72\x74', "\x65\x61\x63\x68", "\x68\x74\x6d\x6c", "\x69\x6e\x64\x65\x78\x4f\x66", '\x2a', "\x61\x74\x74\x72", '\x63\x6c\x61\x73\x73', "\x73\x70\x6c\x69\x74", "\x20", "", "\x6c\x65\x6e\x67\x74\x68", "\x70\x75\x73\x68", '\x41\x42\x43\x44\x45\x46\x47\x48\x49\x5a', "\x70\x61\x72\x73\x65\x49\x6e\x74", "\x6a\x6f\x69\x6e", '']; 2 $(function() { 3 $(_$[0])[_$[1]](function() { 4 var a = $(this)[_$[2]](); 5 if (a[_$[3]](_$[4]) != -0x1) { 6 return 7 } 8 ;var b = $(this)[_$[5]](_$[6]); 9 try { 10 b = (b[_$[7]](_$[8]))[0x1]; 11 var c = b[_$[7]](_$[9]); 12 var d = c[_$[10]]; 13 var f = []; 14 for (var g = 0x0; g < d; g++) { 15 f[_$[11]](_$[12][_$[3]](c[g])) 16 } 17 ;$(this)[_$[2]](window[_$[13]](f[_$[14]](_$[15])) >> 0x3) 18 } catch (e) {} 19 }) 20 })
1 var _$ = ['.port', "each", "html", "indexOf", '*', "attr", 'class', "split", " ", "", "length", "push", 'ABCDEFGHIZ', "parseInt", "join", '']; 2 $(function() { 3 $('.port').each(function() { 4 var a = $(this).html(); 5 if (a.indexOf('*') != -0x1) { 6 return 7 } 8 ;var b = $(this).attr('class'); 9 try { 10 b = (b.split(" "))[0x1]; 11 var c = b.split(""); 12 var d = c.length; 13 var f = []; 14 for (var g = 0x0; g < d; g++) { 15 f.push('ABCDEFGHIZ'.indexOf(c[g])) 16 } 17 ;$(this).html(window.parseInt(f.join('')) >> 0x3) 18 } catch (e) {} 19 }) 20 })
1 package com.cnblogs.wycm; 2 3 import org.jsoup.Jsoup; 4 import org.jsoup.nodes.Document; 5 import org.jsoup.nodes.Element; 6 import org.jsoup.select.Elements; 7 8 import java.io.IOException; 9 import java.net.URL; 10 11 public class Chapter2 { 12 public static void main(String[] args) throws IOException { 13 Document document= Jsoup.parse(new URL("http://www.goubanjia.com/"), 10000); 14 setPort(document); 15 //獲取class='table'的table的全部子節點tr 16 Elements elements = document.select("table[class=table] tr"); 17 for (int i = 1; i < elements.size(); i++){ 18 //獲取td節點 19 Element td = elements.get(i).select("td").first(); 20 /** 21 * 查找全部style屬性包含none字符串的標籤(頁面上未顯示的標籤),並移除 22 * 包括如下兩種 23 * style=display: none; 24 * style=display:none; 25 */ 26 for(Element none : td.select("[style*=none;]")){ 27 none.remove(); 28 } 29 //移除空格 30 String ipPort = td.text().replaceAll(" ", ""); 31 //打印 32 System.out.println(ipPort); 33 } 34 } 35 36 /** 37 * js代碼port還原 38 * @param doc 39 */ 40 private static void setPort(Document doc){ 41 for (Element e : doc.select(".port")){//$('.port').each(function() { 42 String a = e.text();//var a = $(this).html(); 43 if(a.indexOf("*") != -0x1){//if (a.indexOf('*') != -0x1) { 44 return; 45 } 46 String b = e.attr("class");//var b = $(this).attr('class'); 47 b = b.split(" ")[0x1];//b = (b.split(" "))[0x1]; 48 String[] c = b.split("");//var c = b.split(""); 49 int d = b.length();//var d = c.length; 50 StringBuilder f = new StringBuilder();//var f = []; 51 for(int g = 0x0; g < d; g++){//for (var g = 0x0; g < d; g++) { 52 f.append("ABCDEFGHIZ".indexOf(c[g]));//f.push('ABCDEFGHIZ'.indexOf(c[g])) 53 } 54 e.text(String.valueOf(Integer.valueOf(f.toString()) >> 0x3));//$(this).html(window.parseInt(f.join('')) >> 0x3) 55 } 56 } 57 }
maven依賴html
1 <dependency> 2 <groupId>org.jsoup</groupId> 3 <artifactId>jsoup</artifactId> 4 <version>1.10.2</version> 5 </dependency>
一個程序員平常分享,包括但不限於爬蟲、Java後端技術,歡迎關注。前端