使用java代码增加一点博客访问量

声 明 : \color{red}{声明:} :

本 人 写 这 个 小 程 序 和 写 这 篇 博 客 的 目 的 是 用 于 学 习 研 究 , 并 且 \color{red}{本人写这个小程序和写这篇博客的目的是用于学习研究,并且}
只 是 在 测 试 的 时 候 用 了 一 下 , 并 没 大 规 模 的 为 自 己 或 别 人 增 加 \color{red}{只是在测试的时候用了一下,并没大规模的为自己或别人增加}
访 问 量 。 请 读 者 也 以 学 习 为 目 的 , 不 要 作 用 在 其 它 不 法 的 方 面 \color{red}{访问量。请读者也以学习为目的,不要作用在其它不法的方面} 访

前情引入

自己在写博客的时候,为了调整好效果,总是先写好,发布出来,然后自己开两个窗口,一个窗口用来修改格式,另一个用来观察样式是否满足要求。(虽然csdn提供了预览效果,但是由于窗口大小不一样,和最终展示的效果也不一样,所以自己开两个窗口来调整样式)。然后我就发现了一个问题,自己在自己的文章里刷新,访问量也会增加。开始我也没在意,直到最近,学了一些网络相关的知识……突发奇想,我要是用一段代码来不停的访问呢?那岂不是可以一直刷访问量?

着手测试

有了想法之后,我就开始着手代码测试,通过简单的测试,发现是可以增加访问量的,但是,没有像想象中的那样增加。我去百度了一下,原来是同一个ip,同一篇博文,一分钟内只算一次有效访问。哦原来是这样,那意思就是每分钟就只能增加博文数量那么多访问量了,那就需要改变一下策略了。

完整思路:
读取博客首页,然后利用正则找出所有博文的地址,然后去读取每篇博文,间隔一分钟,重复执行一次。

代码

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@SuppressWarnings("all")
public class InetAddressTest04
{
    
    public static void main(String[] args) throws Exception
    {
        //此处双引号中输入测试用的博客首页地址,例如:https://blog.csdn.net/xxxx
        reVisit("");
    }


    //重复访问的方法
    public static void reVisit(String blogAddress) throws Exception
    {
        int count = 0;
        while (true)
        {
            //因为同一篇文章,同一个ip,一分钟内只算一次有效的访问,所以用计算了某次中花费了多少时间,便于计算下次访问的时间
            int onceCount;
            long start = System.currentTimeMillis();

            //根据集合是否为空来判断调用那个访问的方法
            if (allArticleAddress.isEmpty())
            { onceCount = firstVisit(blogAddress); }
            else
            { onceCount = againVisit(); }
            System.out.println("您此次共增加访问量:"+onceCount+"   累计共增加访问量:"+(count+=onceCount));

            long end = System.currentTimeMillis();
            long diff = 70*1000 - (end - start);
            Thread.sleep( diff >= 0?diff:0 );
        }
    }



    static ArrayList<String> allArticleAddress = new ArrayList<>();
    //第一次访问的方法
    public static int firstVisit(String blogAddress) throws Exception
    {
        //传入博客首页地址,并且获得一个由网络构成的输入流
        URL blogURL = new URL(blogAddress);
        InputStream in = blogURL.openStream();

        //利用StringBuilder,将博客首页地址取出出来,并且拼接成一个字符串,
        StringBuilder pageText = new StringBuilder();
        int len;
        byte[] buffer = new byte[1024];
        while ((len = in.read(buffer)) != -1)
        { pageText.append(new String(buffer, 0, len, StandardCharsets.UTF_8)); }


        //利用正则,查找出首页里所有的博文地址,
        Pattern compile = Pattern.compile("https://blog.csdn.net/.*?/article/details/\\d{9}");
        Matcher matcher = compile.matcher(pageText.toString());

        int count = 0;
        while (matcher.find())
        {
            //将每个博文地址存入一个ArrayList集合中,注意去重
            String eachArticleAddress = matcher.group();
            if (allArticleAddress.contains(eachArticleAddress))
            { continue; }
            allArticleAddress.add(eachArticleAddress);

            //根据每一个博文地址创建URL对象,获取其输入流,只要读博文里的一个字节,就算访问
            URL eachUrl = new URL(eachArticleAddress);
            InputStream eachArticlenIn = null;

            /*
                这里不知道为什么会出现“文件找不到”这个异常,但是我将出现异常的这个博文地址复制到浏览器中是可以打开的。既然不知道原因,而且是小部分,
                所以就利用异常处理机制,直接跳过这篇博文,但是还是需要将其存入集合中,因为后面重复访问的过程需要从集合中读取每篇博文的地址
             */
            try
            { eachArticlenIn = eachUrl.openStream(); }
            catch (FileNotFoundException e)
            {
                allArticleAddress.add(eachArticleAddress);
                continue;
            }

            //计数、读取一个字节、释放资源等操作
            count++;
            eachArticlenIn.read();
            eachArticlenIn.close();
        }
        in.close();
        return count;
    }


    //再次访问的方法,再次访问就简单了,因为第一次访问已经将每篇博文的地址存入集合中了
    public static int againVisit()
    {
        int count = 0;
        //遍历集合,去每篇博文读取一个字节
        for (int i = 0; i < allArticleAddress.size(); i++)
        {
            URL url = null;
            InputStream in = null;
            //也会出现“文件找不到”的异常,也直接跳过
            try
            {
                url = new URL(allArticleAddress.get(i));
                in = url.openStream();
                in.read();
                count ++;
            }
            catch (FileNotFoundException e)
            { continue; }
            catch (Exception e)
            { e.printStackTrace(); }
            finally
            {
                if (in != null)
                {
                    try
                    { in.close(); }
                    catch (IOException e)
                    { e.printStackTrace(); }
                }
            }
        }
        return count;
    }
}

我代码中写了不少注释,所以我就不详细解释了。
经过简单的测试,可以完成功能,但是存在一些bug,但是由于最终不会实际的投入使用,所以也就没去处理,简单描述一下:

  1. 不知道是网络还是什么原因,会出现FileNotFoundException这个异常,我只是将它跳过了。
  2. 网络不好的话,会很耗时,可以考虑使用多线程
  3. 我测试好像发现,当同一个ip访问量到了一定的次数之后,有效访问时间间隔会边长。

我觉得那些QQ空间刷访问量、刷攒之类的,可能就是通过这种方式实现的。

关于爬虫

整个互联网就像是一张网,这些网页链接就像是蛛丝,把这个整个互联网给连接起来了。而爬虫,就是在这些网络间爬取数据的程序,爬虫的英文名就是spider,蜘蛛。

我们天天都在用的搜索引擎,其实也是一个爬虫,只不过他是一个超级大的爬虫。为什么我们输入一个关键字,就能搜索到很多相关的信息,其实是搜索引擎这个超级大的爬虫,在网络中,根据我们输入的关键字爬取出来的数据。

技术本身,是没有善恶之分的,使用它的人,决定了它是善是恶。就像核技术,用在能源方面,可以造福人类,但是用在武器上,也可能毁灭人类。爬虫也是如此,本身没有善恶之分的,只是一些居心不良的人,让它背上了莫须有的污名。

爬虫协议

用程序去爬取网站的数据,会增大网站服务器的负担,而网站的用户并没有增加,所以很多网站是不欢迎爬虫的。除非是百度这种搜索引擎的爬虫,因为被爬取出来,就意味着可能会被用户点击。

但也有一些网站,也不希望百度爬取它的数据,那就是电商网站,因为如果用户在百度上搜索一件商品,直接将电商网站里的商品价格、描述等数据搜索出来了,那么用户就会对电商网站的依赖降低,从而更加依赖百度,电商网站的用户就会流失。比如我们在百度搜索关键字:机械键盘
百度搜索机械键盘关键字
这些数据就没有被抓取出来,但百度怎么知道哪些数据是网站不希望被爬取的,哪些数据是网站希望被爬取的呢?所以就产生了一个东西:爬虫协议。爬虫协议一般在网站的根目录下,协议里面标明了哪些数据是可以被爬取的,哪些数据是不希望被爬取的,就以淘宝为例。淘宝的爬虫协议:https://www.taobao.com/robots.txt
淘宝的爬虫协议
User-agent 代表的是爬虫的的种类,Disallow代表的是禁止爬取的数据。通过简单的理解,淘宝是不希望百度这个爬虫爬取它任何数据的,理由我前面也说过了。

我再来看一看csdn 的爬虫协议:https://www.csdn.net/robots.txt
csdn的爬虫协议* 是通配符,代表任何类型的爬虫,下面是一些csdn不希望爬虫爬取的数据地址列表,我们爬取的首页地址是:https://blog.csdn.net/xxxx,爬取的博文地址是:https://blog.csdn.net/xxxx/article/details/xxxx。都没在上面的列表中。其实原因也很简单,如果用户通过一个关键字搜索了一些关于技术类的东西,但搜索引擎连文章内容都没展示出来,只显示了“由于该网站的robots.txt文件存在限制指令(限制搜索引擎抓取),系统无法提供该页面的内容描述 - 了解详情”,那人肯定不会点进去。

所以我们做的,爬取这些数据,也是没有违反csdn 的规定的。但是如果是恶意的去爬取,企图增加访问量,那就是另一回事了,被封号也说不定哦。

有什么不对或不懂的地方,欢迎讨论交流。
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值