利用HttpURLConnection抓取网页取名

原创 2007年09月22日 17:29:00

闲来无事,利用Java 的HttpURLConnection,使用多线程来抓取网页,计算名字的分数。

仅供娱乐。

 

程序如下 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
import org.apache.log4j.Logger;
 
public class XingMing {
 
 static final Logger log = Logger.getLogger(XingMing.class);
 
 public static String read(String urlStr) {
   try {
     URL url = new URL(urlStr);
     HttpURLConnection connection = (HttpURLConnection) url
         .openConnection();
     connection.connect();
     InputStream in = connection.getInputStream();
     BufferedReader read = new BufferedReader(new InputStreamReader(in));
     StringBuffer buf = new StringBuffer();
     String line = null;
     while ((line = read.readLine()) != null) {
       buf.append(line);
     }
     return buf.toString();
   } catch (MalformedURLException e) {
     return null;
   } catch (IOException e) {
     return null;
   }
 }
 
 public static String find(String str, String beginStr, String endStr) {
   final int length = beginStr.length();
   int index = str.indexOf(beginStr);
   String result = null;
   if (index != -1) {
     int index2 = str.indexOf(endStr, index + length);
     if (index2 != -1) {
       result = str.substring(index + beginStr.length(), index2);
     }
   }
   return result;
 }
 
 public static String findName(String source, String name) {
   // value=我的姓名『XX』的分析:
   return find(source, "value=我的姓名『", "』的分析");
 }
 
 public static String findScore(String source, String name) {
   // <font size=3>姓名评分:</font><font color=0000ff size=5FONT-SIZE: 10pt;">
   // BT,楷体">99.5</font>
   return find(
       source,
       "<font size=3>姓名评分:</font><font color=0000ff size=5 BT,楷体/">",
       "</font>");
 }
 
 public static void main(String[] args) throws IOException {
   final char firstChar = '';
   final char lastChar = '';
   // 最大开启100个线程,可以加快查询速度.
   int maxThread = 100;
   int step = (lastChar - firstChar) / maxThread;
   for (int i = 0; i < maxThread; i++) {
     char start = (char) (firstChar + i * step);
     char end = (char) (firstChar + i * step + step - 1);
     System.out.println("开启" + (i + 1) + "处理:" + start + "-" + end
         + (char) (end + 1));
     new CallThread(start, end).start();
   }
 }
 
 static class CallThread extends Thread {
   private charstart;
   private charend;
   private String info;
 
   CallThread(char start, char end) {
     this.start = start;
     this.end = end;
     this.info = this.start + "-" + this.end;
   }
 
   public void run() {
     //
     final char youname1 = '';
     final String url = "http://www.xingming.net/cmjg-mz.asp?sex=&youname1="
         + youname1 + "&youname2=";
     String youname2;
     String webinfo = null;
     for (char i = start; i <= end; i++, webinfo = null) {
       // 名字规则自己取吧.
       // youname2 = "" + i;
       // youname2 = "" + i + i;
       youname2 = i + "";
       for (int j = 0; j < 5 && webinfo == null; j++) {
         webinfo = XingMing.read(url + youname2);
       }
       if (webinfo == null) {
         log.warn("获取名字[" + youname1 + youname2 + "]失败");
         continue;
       }
       String webName = XingMing.findName(webinfo, "[" + youname2
           + "]");
       String webScore = XingMing.findScore(webinfo, "[" + youname2
           + "]");
       try {
         if (Float.parseFloat(webScore) >= 90) {
           System.out.println(youname2 + ":" + webName + ":"
               + webScore);
         }
       } catch (Exception e) {
       }
       log.info(this.info + ":" + webName + ":" + webScore);
       if ((i - start) % 100 == 0) {
         System.out.println(this.info + "处理了" + (i - start) + "");
       }
     }
     System.out.println(this.info + "结束了.....");
   }
 }
}
 
 
最新程序:
最终版宝宝取名程序,java版,我家宝宝名字已经确定。  

http://blog.csdn.net/z3h/archive/2008/01/16/2047420.aspx  

用HttpUrlConnection抓取网页内容

一、HttpUrlConnection连接之模拟浏览器 在诸多的网站中,特别是大型的网站,设置了必须是浏览器的请求才会回应。之所以这样设置,就是为了防止我们这种项目给他产生无意义的请求(往往这种...

通过代理抓取网页code方法 proxy httpurlconnection

非常简单,非常容易用--可以可连接 package com.wanju.project001.zonghe.common.util.wjgate; import java.io.BufferedRe...

使用HTTPURLConnection模拟登陆,爬取网页内容

如果你需要爬取某些网页的内容,但这些网站需要登录,那就需要一些额外的步骤来由程序来完成这些登录并爬取我们需要的网页内容了,任意登录页面都是向服务器发送请求,如果我们能够模拟向服务器发送请求,那么自然登...

通过HttpURLConnection获取网页图片 并保存至内存卡的例子

该demo为通过多线程和HttpURLConnection获取网上图片,并更新UI的例子:   1.MainActivity.class public class MainActivity exten...

通过HttpURLConnection获得网页源代码

找了一个网络上的来使用 结果出现某个位置上的字符的UTF-8的中文乱码问题 关键之处是在IO的时候指定编码,而不是在读取的时候指定   /** * 获取网络的响应,判断并返回 * ...
  • ini9
  • ini9
  • 2012年04月10日 22:34
  • 663

HttpURLConnection模拟登录后添加cookie读取网页

package fileTest; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public...
  • zxyah
  • zxyah
  • 2011年12月26日 14:50
  • 3886

Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)

如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Android对HTTP(超文本传输协议)也提供了很好的支持,这里包括两种接口: 1、标准Java接口(java.net...

HttpURLConnection模拟登录后添加cookie读取网页

[html] view plaincopy package fileTest;    import java.io.*;  import java.net.HttpURLConnecti...

Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)

如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Android对HTTP(超文本传输协议)也提供了很好的支持,这里包括两种接口:1、标准Java接口(java.net) --...

在android上用HttpURLConnection获取网页内容

界面效果如下,在编辑框中输入网址,点击按钮后,获取编辑框中的网址,打开HttpURLConnection连接,并获取输入流,将返回的流保存为html文件,然后再用WebView将html文件显示出来。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用HttpURLConnection抓取网页取名
举报原因:
原因补充:

(最多只允许输入30个字)