前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java|如何使用“Java”爬取电话号码

Java|如何使用“Java”爬取电话号码

作者头像
算法与编程之美
发布于 2020-04-01 02:51:33
发布于 2020-04-01 02:51:33
93100
代码可运行
举报
运行总次数:0
代码可运行

前言

下面会介绍如何使用“Java”去爬取到一个网站的电话号码。使用到的一些基本语法与定义:IO流,正则表达式,如过不清楚可以先去了解一下,当然在下文中也会做出对应使用介绍与解释。

具体步骤

在这个小实验里,新建一个class文件就可以完成。首先需要写一个main函数,在idea和eclipse里都有快捷键,可以自行查阅。这里用的idea,直接psvm就可以完成。接下来就是在main函数里写需要的代码:

首先是载入连接需要爬取的网址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String path =  "https://www.jihaoba.com/escrow/?_mhead=4";
URL url = new URL(path);
URLConnection urlconn =  url.openConnection(); 

然后是创建用来保存电话号码的txt文件:

FileWriter fw = new FileWriter("C:/Users/h/Desktop/tel.txt",true);

再是声明使用需要的输入输出流:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String str = null;
String regex = "1[3456789]\\d{9}";  
Pattern p = Pattern.compile(regex)
while ((str = br.readLine()) != null){
Matcher m = p.matcher(str);
     while (m.find()){
         pw.println(m.group());
}
} 

接下来是接收获取到内容,并且通过编译后正则表达式匹配方法去循环写入到txt文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String str = null;
String regex = "1[3456789]\\d{9}";  
Pattern p = Pattern.compile(regex)
while ((str = br.readLine()) != null){
Matcher m = p.matcher(str);
     while (m.find()){
         pw.println(m.group());
}
} 

最后进行关流,释放资源:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
br.close();
     pw.close();
} catch (IOException e) {
e.printStackTrace();
}

完整加注释代码:

但是不要认为将上面代码都扔在一起就行了哦,因为还有try,catch和finally没有写出来而且有一些小问题需要注意,接下来就看一下经过整理注释后的完整代码吧。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.yellow.java_pachong.tel;
 import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 //java爬取电话号码
 public class TelDemo {
     //java程序入口,main函数
     public static void main(String[]  args) {
         //将变量声明在外面,成为一个全局的,因为作用域的原因,防止finally里无法关流
         //如果在try里声明,就需要在try里关,但是如果运行失败,就关不了,finally里就不用担心
         BufferedReader br = null;
         PrintWriter pw = null;
         //目标网址的爬取,随意找的一个
         String path =  "https://www.jihaoba.com/escrow/?_mhead=4";
         try {
             //创建一个url对象,一new一对象。
             URL url = new URL(path);
             //打开网络链接
             URLConnection urlconn =  url.openConnection();
             //创建一个指定的存储文件,后面的true表示如果文件存在,会在原文件基础上续写
             FileWriter fw = new  FileWriter("C:/Users/h/Desktop/tel.txt",true);
             //流
             //首先创建一个输入流
             InputStream is =  urlconn.getInputStream();
             //is是一个字节流,为了让我们的效率更高,将字节流转为字符流
             InputStreamReader isr = new  InputStreamReader(is);
             //因为网页上的是一行一行的,所以还需要将字符流转为包装的字符缓冲流
             br = new BufferedReader(isr);
             //精简的写法
             //BufferedReader br = new  BufferedReader(new InputStreamReader(urlconn.getInputStream()));
             //创建一个缓冲字符输出流
             pw = new PrintWriter(fw);
             //定一个字符串来接收读取到的内容
             String str = null;
             //手机号的正则表达式,首先是1开头,然后是3456789的第二位,接下来后面9位没有要求,就用\d{9}表示,并且在Java里用\来转义
             String regex =  "1[3456789]\\d{9}";
             //将上面的正则表达式编译成一种可以用来比较的方法,模式
             Pattern p =  Pattern.compile(regex);
             //按行循环的去读取内容
             while ((str = br.readLine()) !=  null){
                 //创建一个指定模式的匹配器
                 Matcher m =  p.matcher(str);
                 //循环匹配
                 while (m.find()){
                     //使用输出流写到指定的位置,m.group把匹配到的转成字符串
                     pw.println(m.group());
                 }
             }
//控制台提示完成
             System.out.println("获取完成!");
         } catch (MalformedURLException  e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         }
         //关流,不要忘记了,释放资源
         finally {
             try {
                 br.close();
                 pw.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }
 } 

展示:

图5.1 电话号码网

图5.2 控制台输出完成

图5.3 爬取到的号码

以上操作就完成了电话号码的简单爬取,在后面可能还会继续更新关于其他爬取的相关内容。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java模仿网络爬虫简单案例
java模仿网络爬虫简单案例,直接看代码 package com.example.demo1; import java.io.*; import java.net.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author: YinLei * Package: com.example.demo1 * @date: 2021/9/7 20:23 * @Description: java爬虫测试
知识浅谈
2021/09/27
3310
Java爬取网络博客文章
近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地址配置把人搞废了,不过总的来说还算顺利,网站地址  https://chenchangyuan.cn(空博客,样式还挺漂亮的,后期会添砖加瓦)
Jack Chen
2018/09/14
6180
Java爬取网络博客文章
Java---网络编程(4)-C/S-B/S
1、客户端和服务端的软件都需要程序员进行编写。 2、客户端维护起来较为麻烦。(缺陷) 3、客户端的存在可以将一部分运算分离到客户端来运行,减轻了服务器端的压力。(优势)
谙忆
2021/01/21
2850
Java---网络编程(4)-C/S-B/S
Java也能做爬虫???
网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数据采集一般只有以下几种情况:
老九君
2020/12/14
9950
Java也能做爬虫???
java简易爬虫Crawler
一,介绍: >这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。 >而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。 >不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用。
全栈程序员站长
2022/07/01
3820
java简易爬虫Crawler
java 爬取网页内容。 标题、图片等
package com.fh.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import jav
FHAdmin
2021/09/24
1.7K0
网络爬虫 | Java 实现 AI人工智能技术 - 网络爬虫功能
目前网络上充斥着越来越多的网页数据,包含海量的数据,但是很多时候,不管是出于对产品需求还是数据分析的需要,我们需要从这些网站上搜索一些相关的、有价值的数据,进行分析并提炼出符合产品和数据的内容。
码神联盟
2018/07/30
5.5K5
网络爬虫 | Java 实现 AI人工智能技术 - 网络爬虫功能
正则表达式处理复杂文本,效率就是高!
\d{6} 重复6次 \d\d{6}重复7次 (\d\d){6}重复12次
公众号 IT老哥
2022/12/17
3660
正则表达式处理复杂文本,效率就是高!
Java电话号码和手机号码正则验证
/** * 手机号验证 * * @param str * @return 验证通过返回true */ public static boolean isMobile(String str) { Pattern p = null; Matcher m = null; boolean b = false; p = Pattern.compile("^[1][3,4,5,7,8][0-
艳艳代码杂货店
2021/10/27
1.9K0
java 解析网易邮箱里面的附件地址,获取下载地址
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; impo
JQ实验室
2022/02/14
1.4K0
Java Review (二十二、正则表达式)
正则表达式是一个强大的字符串处理工具 ,可以对字符串进行查找、提取、分割、替换等操作 。 String类里也提供了如下几个特殊的方法 :
三分恶
2020/07/16
5450
Java统计项目代码量
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * 类名:CodeCounter.java<br> * <p> * 功
Java学习123
2018/05/16
8340
java之学习正则表达式的获取功能及经典调用排序
结果示意图 A:Pattern和Matcher的概述 * 指定为字符串的正则表达式 * 必须首先被编译为此类的实例。 * 然后,可将得到的模式用于创建 Matcher 对象, * 依照正则表达式,该对象可以与任意字符序列匹配。 * 执行匹配所涉及的所有状态都驻留在匹配器中, * 所以多个匹配器可以共享同一模式。 B:模式和匹配器的典型调用顺序 * 通过JDK提供的API,查看Pattern类的说明 * 典型的调用顺序是 * Pattern p = Pattern.compile(“a*b”
吾爱乐享
2018/07/13
4460
java 后台实现查询号码归属地
java 后台实现查询号码归属地 测试展示 Paste_Image.png 代码 package com.wuage.clm.util; import java.io.BufferedReader;
挑战者
2018/06/29
1.1K0
Java---网络蜘蛛-网页邮箱抓取器~源码
刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~ 自己以前做过微商,而且还掏钱买过抓取网络邮箱的软件~现在O(∩_∩)O哈哈~我自己做~当然啦,没有别人做得好~只是功能还是差不多啦~
谙忆
2021/01/21
5430
Java---网络蜘蛛-网页邮箱抓取器~源码
获取字符串内双引号中的所有内容
测试字符串 String str = "[\"内容\",\"标题\"]"; 编码如下: package Action; import java.util.regex.Matcher; import java.util.regex.Pattern; public class demo { public static void main(String[] args) { String str = "[\"内容\",\"标题\"]"; Pattern p = Pattern.compile("\"
红目香薰
2022/11/29
4.6K0
获取字符串内双引号中的所有内容
第26次文章:正则表达式
一种强大而灵活的文本处理工具。大部分编程语言、数据库、文本编辑器、开发环境都支持正则表达式
鹏-程-万-里
2019/09/28
5140
有必要了解的正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。学习正则表达式很大程度上就是学习正则表达式的语法规则。
AI码真香
2022/09/13
7630
Java正则表达式——验证手机号和电话号码
一个朋友需要,所以写了这两个,话不都说,看代码 /** * 获取当前的httpSession * @author :shijing * 2016年12月5日下午3:46:02 * @return */ public static HttpSession getSession() { return getRequest().getSession(); } /** * 手机号验证 * @author :shijing * 2016年12
执笔记忆的空白
2020/12/25
7.1K0
java 读写 ini 配置文件
package org.fh.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.net.URLDecoder; import java.util.regex.Matcher; import java.util.regex.Pattern
FHAdmin
2022/01/10
1.3K0
相关推荐
java模仿网络爬虫简单案例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验