public Monster fetch(int no) throws IOException, ParseException, InterruptedException {
    Document doc =
        Jsoup.connect("http://dqmsl-search.net/monster/detail?no=" + no)
            .userAgent(
                "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
            .referrer("http://www.google.com")
            .get();

    if (doc.select("div.mboxh h3").text().contains("404")) {
      // 404 not found
      return null;
    }

    Monster m = monsterParser.parse(doc);
    if (m.getHp() == 0) {
      System.out.println("monster data incorrect, no:" + no);
      System.in.read();
    }
    return m;
  }
  public static void main(String[] args) {
    // fetch and print result
    PartyFetcher pf = new PartyFetcher();

    int upTo = 522;
    for (int no = 519; no <= upTo; no++) {
      // fetch monster
      Monster mm = null;
      try {
        mm = pf.fetch(no);
      } catch (Exception e) {
        System.out.println("fetch no:" + no + " failed:" + e.getMessage());
        e.printStackTrace();
        continue;
      }

      if (mm == null) {
        System.out.println("no:" + no + " not found");
        continue;
      }

      System.out.println(mm.toString());
    }
  }