前幾天看到有人在博問上求全部成語,想到恰好看了jsoup,就動手實踐了一下,提問者給出了網站,一看很簡單,就兩種頁面,一種是包含某個字的成語連接頁面,一個是具體的包含某個字的成語的頁面java
下面是個人代碼,用到了jsoup的jar包node
package cnblogs.spider; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class IdiomScratch { public static void main(String[] args) { final String url = "http://www.hydcd.com/cy/chengyu/cy.htm"; final String urlSub = "http://www.hydcd.com/cy/chengyu/"; BufferedWriter writer = null; try { Document doc = Jsoup.parse(new URL(url).openStream(), "gb18030", "http://www.hydcd.com"); Element cyTable = doc.getElementById("table1"); Elements aElements = cyTable.getElementsByTag("a"); List<String> aHrefs = new ArrayList<String>(); if(null != aElements && aElements.size() > 0) { for(int i = 0, size = aElements.size(); i < size; i++) { aHrefs.add(urlSub + aElements.get(i).attr("href")); } File cytxt = new File("c://cengyu.txt"); if(!cytxt.exists()) { cytxt.createNewFile(); } writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(cytxt))); String cy = null; for(int i = 0, size = aHrefs.size(); i < size; i++) { doc = Jsoup.parse(new URL(aHrefs.get(i)).openStream(), "gb18030", "http://www.hydcd.com"); cyTable = doc.getElementById("table1"); aElements = cyTable.getElementsByTag("a"); if(null != aElements && aElements.size() > 0) { int b = 0; for(int j = 0, size2 = aElements.size(); j < size2; j++) { cy = aElements.get(j).text(); writer.write(cy + " "); b++; if(b == 8) { b = 0; writer.write("\r\n"); } } writer.write("\r\n"); if(b != 0) { writer.write("\r\n"); } writer.flush(); } } } } catch(IOException e) { e.printStackTrace(); } finally { if(null != writer) { try { writer.close(); } catch(IOException e) { e.printStackTrace(); } } } } }
說一下碰到的坑,一開始沒有注意編碼問題,獲得的txt結果中總有一些亂碼,後來看網頁源碼顯示編碼是gb2312,就換成了gb2312,但仍是不對,一想gb2312是簡體字的,確定不能包含全部的成語中的漢字啊,全部就查了一下漢字的編碼,發現有gb18030,就用這個試了一下,果真沒有亂碼了ide
結果以下:網站
下面是全部成語的txt文件和代碼:編碼
全部成語+代碼url