用的是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