java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码
原創 野狗菌 希望你能喜歡 今天
關于本文:
本文介紹一個簡單Java爬蟲,獲取網頁源碼,爬取電話號碼。
本篇教程用我的博客一個測試網頁演示。
——野狗菌【希望你能喜歡】
測試頁面:
https://www.wayteam.xyz/archives/phonenumber
源代碼:(注釋寫的很詳細了,太艱難,就直接放代碼,不做多解釋了)
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
?
/**
* @author 野狗菌
* 2020-04-06
* 爬蟲入門(一):獲取網頁源代碼,爬取手機號碼
* 微信公眾號:希望你能喜歡 (也可以搜索 foryouway )
* 個人網站:www.wayteam.xyz
*/
public class GetPhoneNumber {
?
public static void main(String[] args) throws Exception {
?
?
?
//創建一個要訪問的url
URL url = new URL("https://www.wayteam.xyz/archives/phonenumber");//這里以我的博客測試頁面為例
?
System.out.println("正在獲取"+url+"網站的手機號碼中-----請稍等");//無關緊要的代碼,只是為了友好的提示
?
//打開上面獲取的鏈接
URLConnection urlConnection = url.openConnection(); //新手提醒:這個會拋出異常,我為了方便,全部拋出去,不作處理throws Exception
?
//創建一個指定的存儲文件
File file = new File("phone.txt"); //這里是相對路徑,表示存在這個同級目錄下
//創建一個字符輸出流(從本程序輸出到phone.txt文件)
PrintWriter printWriter = new PrintWriter(file);//程序執行到這里就會在對應位置創建對應文件了
?
//創建一個輸入流(這個輸入輸出是以本程序為參照)
InputStream inputStream = urlConnection.getInputStream();
?
//把上面的字節流轉化為字符流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
?
//把字符流轉化為字符緩沖流
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
?
//創建一個空的字符串來接收從字符緩沖流里接收的數據
String htmlLine = null;
?
//手機號碼的正則表達式,用來匹配數據中的手機號碼
String regex = "1[35789]\\d{9}";//1:第一位是1,[35789]:第二位是35789中的一個,\d{9}:剩余9位數任意(因為java中\需要轉義,所以這里用\\)。
Pattern pattern = Pattern.compile(regex);//把正則表達式編譯成模式。
?
//用while遍歷上面的到的字緩沖流,把值給上面的空字符串(readLine是一行一行讀取網頁源代碼的)
while ((htmlLine = bufferedReader.readLine()) != null){ //當字符流緩沖流沒有為空時,一直讀取它。
?
//創建一個匹配器來匹配上面的正則表達式模式
Matcher matcher = pattern.matcher(htmlLine);
?
//循環匹配
while (matcher.find()){ //當匹配成功時,往下執行
printWriter.println(matcher.group());//將匹配的數據用group轉化為字符串,寫進字符輸出流中
}
?
?
?
?
/**
* 在控制臺打印htmlLine,觀察它是什么樣的數據
* 為了方便大家理解readLine執行過程,給進程設置一個休眠時間,不然數據嘩啦一下直接出來
* 這里我錄制了一個動圖,大家也可以自己試試。
*/
/*System.out.println(htmlLine);
Thread.sleep(100);//100毫秒*/
?
?
}
?
/**
* 關閉這兩個流
*/
bufferedReader.close();
printWriter.close();
?
System.out.println("獲取號碼成功,快去"+file+"查看結果吧"+"\n"+"-------by野狗菌\uD83D\uDC36");//無關緊要的代碼,只是為了友好的提示
}
?
}
一個演示:
結果展示:
問題:為什么這里獲取的手機號碼比我網頁里面寫的要多?
因為這些數據被我的匹配器匹配成號碼了。。。。
后面會介紹其他抓取方式,可以避免這個問題。
** **
** **
** **
在公眾號內發送【07】,即可獲取源碼(你也可以直接自己創建項目,把上面內容寫進去)。
總結
以上是生活随笔為你收集整理的java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 压缩gz_如何在Java中将.
- 下一篇: 关于java中锁的面试题_Java面试题