java爬取网站电话号码(网络爬虫练习实例--I/O流)

直接上代码了。这里只是爬取首页的,爬取别的页面只需要加个参数,循环一下就可以了!

package mobile.phone.number;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * java爬取网站电话号码
 * @author 张智远
 *
 */
public class GetPhoneNumber {
     //Java程序的入口
    public static void main(String[] args) {
     //目标网址
     BufferedReader br=null;
     PrintWriter pw=null;     
     String path="http://taohaoma.com/mobile/number";
     try {
           //创建一个URL对象
           URL url=new URL(path);
           //打开网络链接
           URLConnection urlconn=url.openConnection();
           //创建一个指定的存储文件
           FileWriter fw=new FileWriter("D:/phone.txt");
           //创建一个缓冲字符输出流
            pw=new PrintWriter(fw);
           //创建一个输入流
           //InputStream is=urlconn.getInputStream();
           //将字节流转为字符流
           // InputStreamReader isr=new InputStreamReader(is);
           //字符缓冲流
            br=new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
           //声明一个字符串来接受读取到的内容
           String str=null;
           //手机号码的正则表达式  电话号码是13451247854
           String regex="1[13456789]\\d{9}";
           //将给定的正则表达式编译成一个模式
           Pattern p=Pattern.compile(regex);
           //循环按行读取内容
           while((str=br.readLine())!=null) {
               //正则表达式
               //创建一个指定模式的匹配器
               Matcher m= p.matcher(str);
               //循环匹配
               while(m.find()) {
                   //使用输出流写到指定位置
                   pw.println(m.group());
               }
           }
           System.out.println("获取完成");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {        
             try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
             pw.close();
        }
     
      
     }
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章