用的是Eclipse,筆記本沒裝IDEA
第一步:根據上面要求創建相應的包和類;
第二步:複製以下類的代碼:
package Test3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
public class Url {
public void openUrl(String str)
{
try {
URL myUrl = new URL(str);//打開指定網址
InputStreamReader is =new InputStreamReader( myUrl.openStream(),"utf-8");
//myUrl.openStream()是打開與此URL的連接,並返回一個InputStream以從該連接讀取
// API文檔說明:InputStreamReader類是從字節流到字符流的橋接器:它使用指定的字符集讀取字節並將它們解碼爲字符。
BufferedReader br = new BufferedReader(is);//將inputStramReader轉化爲BufferReader
FileWriter fw = new FileWriter("url.txt");
BufferedWriter bw = new BufferedWriter(fw);
String str1 ="";
String str2="";
while((str1=br.readLine())!= null)
{
str2+=str1;
str2+="\r\n";
}
bw.write(str2);
bw.flush();//因爲使用的是緩衝字符流,最好加上這句話 否則如果緩存區未滿不會將信息寫到文件中
//這也就是爲什麼有的人會問爲什麼我的信息沒成功寫入文件中
is.close();
br.close();
fw.close();
bw.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package Test3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Match {
public void compare(){
try {
FileReader fr = new FileReader("url.txt");//讀取已經抓取的頁面信息文件
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter("match.txt");//此文件用力存放有效的博文網址的文件
BufferedWriter bw = new BufferedWriter(fw);
String str ="";
String readStr="";
//編寫正則表達式
String regex="https://blog.csdn.net/\\w{1,}\\_\\d{1,}/article/details/\\d{1,}";
Pattern p = Pattern.compile(regex);//設置正則規則 不會可以查看Pattern和Matcher這兩個類
while(( readStr=br.readLine())!= null)
{
Matcher m = p.matcher(readStr);//進行匹配
while (m.find()){
if(!str.contains(m.group()))
{
str +=m.group();
str+="\r\n";
}
}
}
bw.write(str);
bw.flush();//因爲使用的是緩衝字符流,最好加上這句話 否則如果緩存區未滿不會將信息寫到文件中
//這也就是爲什麼有的人會問爲什麼我的信息沒成功寫入文件中
fr.close();
br.close();
fw.close();
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package Test3;
//import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
//import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
public class DesktopTest3 {
public ArrayList<String> strList = new ArrayList<String>();//定義一個String類型的泛型集合
public int count = 0; //定義一個變量 用來記錄你一共有多少條博文網址
public int num =0; //定義一個變量 用來記錄你現在完成了第幾遍便利
/*
* 調用此方法通過正則表達式進行匹配
* 匹配有效的博文網址
*/
public void match(){
try {
FileReader fr = new FileReader("match.txt");
BufferedReader br = new BufferedReader(fr);
String str = "";
while((str = br.readLine())!= null){
strList.add(str);
count++;
}
fr.close();
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 通過此方法達成打開相應網址的效果
*/
public void browse(String uri){
try {
URL url = new URL(uri);
InputStream is =url.openStream();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 此方法爲進行無限循環
* 並定時休眠線程
*/
public void begin() {
match();
int i =0;
while(true){
try{
if(i<count)
{
browse((String)strList.get(i));
Thread.sleep(20000);//這裏的單位是毫秒 打開每個博文網址間隔多少ms
}else{
i=-1;
num++;
System.out.println("完成第"+num+"輪訪問");
// Runtime.getRuntime().exec("taskkill /F /IM firefox.exe");
Thread.sleep(100000);//這裏的單位是毫秒 完成每次總的博文遍歷間隔多少ms
}
}catch(Exception e){
e.printStackTrace();
}
i++;
}
}
}
package Test3;
public class Start {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "https://blog.csdn.net/qq_41998273";
Url url = new Url();
url.openUrl(str);
Match match = new Match();
match.compare();
DesktopTest3 dt = new DesktopTest3();
dt.begin();
}
}
第三步:打開你的博客頁面,總頁面,如圖:
將start類中的網址進行替換,如圖
大功告成!!
以下是補充信息:
以上只是想到的程序代碼,博客的訪問量還是要靠博文的質量來提升的!!!
轉自:https://blog.csdn.net/qq_41998273/article/details/86910359