使用jsoup爬取全部成語

  前幾天看到有人在博問上求全部成語,想到恰好看了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

相關文章
相關標籤/搜索