用Java写K站爬虫

背景

近些日子对java爬虫有兴趣,所以又做了一个K站的爬虫,只实现基础功能对请求头没有什么封装(初衷是爬些图片做壁纸),因为以前又做过D站的爬虫,所以这次就一起总结一下吧。

不放源码,想要的同学在git上找:https://github.com/Yan1less/MySpriders

梳理关系

写爬虫主要是逻辑梳理清楚,总站->输入检索标签->每个匹配的图片连接入队->挨个进入连接->获得图片src->下载。

逻辑是这么个逻辑,具体实现时有一些容易忘记的点,这里点名提一下吧

具体操作

    1.需要先通过HttpURLConnection类来获取到页面的代码(这个工具类网上到处都是)

    2.然后就是标准的素质三连(要硬说是干嘛的我觉得应该视为了符合Jsoup的筛选格式吧。。。?)

        String code = GetCode.GetPageCodeByUrl(url);
        Document document = Jsoup.parse(code);
        Elements select = document.select(".inner a");//里面内容的书写方法看下文
3.这是后我们拿到了关键的Elements对象,其通过get(int index).toString()方法来获得某一行的数据,并把它变成String(不然是Element对象)

  4.这个时候我们一般拿到的是整个标签,而我想要标签里面的一些连接,这时候就要用正则了

  5.一个十分好用的正则(想要href就把src换成href,不行在改变括号外面的东西,这一步完了之后就可以拿到一个能用的连接了)

    public static String getImgSrc(String img){
        String src = "";
        Pattern p = Pattern.compile("[\\s|\\S]* src=\"([^<]*)\" [\\s|\\S]*");
        Matcher m =p.matcher(img);
        if(m.matches()){
            src= m.group(1);
        }
        return src;
    }

 6.拿到连接就下载到本地,工具类也到处都是

关于Jsoup的选择器

    https://jsoup.org/apidocs/org/jsoup/select/Selector.html

  这个页面十分好用,不过这里也放一些常用的吧

图案火柴
*任何元素*
tag具有给定标记名称的元素div
*|E任何名称空间ns中的 E类型元素*|name找到<fb:name>元素
ns|E名称空间ns中的 E类型的元素fb|name找到<fb:name>元素
#id属性ID为“id”的元素div#wrap, #logo
.class类名为“class”的元素div.left, .result
[attr]具有名为“attr”的属性的元素(具有任何值)a[href], [title]
[^attrPrefix]属性名称以“attrPrefix”开头的元素。用于查找包含HTML5数据集的元素[^data-], div[^data-]
[attr=val]具有名为“attr”的属性的元素,以及等于“val”的值img[width=500], a[rel=nofollow]
[attr="val"]具有名为“attr”的属性的元素,以及等于“val”的值span[hello="Cleveland"][goodbye="Columbus"], a[rel="nofollow"]
[attr^=valPrefix]具有名为“attr”的属性的元素,以及以“valPrefix”开头的值a[href^=http:]
[attr$=valSuffix]具有名为“attr”的属性的元素,以及以“valSuffix”结尾的值img[src$=.png]
[attr*=valContaining]具有名为“attr”的属性的元素,以及包含“valContaining”的值a[href*=/search/]
[attr~=regex]具有名为“attr”的属性的元素,以及与正则表达式匹配的值img[src~=(?i)\\.(png|jpe?g)]
 以上可以以任何顺序组合div.header[title]

  


组合子

E F来自E元素的F元素div a, .logo h1
E > FE的直接孩子ol > li
E + F紧接着兄弟姐妹E的F元素li + li, div.head + div
E ~ F一个F元素,前面是兄弟Eh1 ~ p
E, F, G所有匹配元素E,F或G.a[href], div, h3

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值