前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片爬虫实践

图片爬虫实践

作者头像
FunTester
发布2021-03-11 16:05:30
4460
发布2021-03-11 16:05:30
举报
文章被收录于专栏:FunTester

之前写了一个Java&Groovy下载文件对比,其中主要的实践就是通过下载图片验证的功能。之前也承诺过一个图片爬虫的功能,刚好有个机会写了一个爬虫,下载一些二维码图片的素材。

思路跟之前一样,先从首页中获取各个素材的地址,然后从地址中匹配图片的URL链接,然后下载到本地。

脚本

代码语言:javascript
复制
package com.funtester.groovy

import com.funtester.httpclient.FunLibrary
import com.funtester.utils.FileUtil
import com.funtester.utils.RWUtil
import com.funtester.utils.Regex

import java.util.stream.Collectors

class FunTester extends FunLibrary {

    static void main(String[] args) {
        String url = "https://kt.fkw.com/muban/word-7502-0-0-0-0-0-0.html"
        def get = getHttpGet(url)

        def response = getHttpResponse(get)
        def s = response.getString(RESPONSE_CONTENT).replaceAll("\\s", EMPTY)
        def urls = (Regex.regexAll(s, "//kt\\.fkw\\.com/tupian/\\w{8}.html") as Set) as List
        //        output(s)
        def collect = urls.stream().map {
            x -> "https:" + x
        }.collect(Collectors.toList())
        output(collect)
        collect.each {
            downPic(it)
        }

    }

    /**
     * 下载图片
     * @param picurl
     * @return
     */
    static def downPic(String picurl) {
        def get1 = getHttpGet(picurl)
        def response1 = getHttpResponse(get1)
        def pic = response1.getString(RESPONSE_CONTENT).replaceAll("\\s", EMPTY)
        //        output(pic)
        def all = "https:" + Regex.findFirst(pic, "//1\\.s91i\\.faiusr\\.com/\\d/.+?\\.png")
        def tuple = FileUtil.handlePicName(all)
        RWUtil.down(tuple.first, LONG_Path + "pic/" + tuple.second)
    }

}

不得不说,正则属实好用,花点时间掌握基础使用还是挺方便的。

这里写了一个封装方法用来获取匹配的第一个对象,如下:

代码语言:javascript
复制
    /**
     * 获取第一个匹配对象
     *
     * @param text
     * @param regex
     * @return
     */
    public static String findFirst(String text, String regex) {
        Matcher matcher = matcher(text, regex);
        if (matcher.find()) return matcher.group();
        return EMPTY;
    }

控制台

代码语言:javascript
复制
INFO-> 当前用户:fv,IP:192.168.0.103,工作目录:/Users/fv/Documents/workspace/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16
WARN-> 响应体非json格式,已经自动转换成json格式!
INFO-> 请求uri:https://kt.fkw.com/muban/word-7502-0-0-0-0-0-0.html,耗时:2058 ms, 
INFO-> 第1个:https://kt.fkw.com/tupian/g0a7Z5l6.html
……此处省略N条日志……
INFO-> 第50个:https://kt.fkw.com/tupian/2icutZh7.html
INFO-> 第51个:https://kt.fkw.com/tupian/2icutZh5.html
WARN-> 响应体非json格式,已经自动转换成json格式!
INFO-> 请求uri:https://kt.fkw.com/tupian/g0a7Z5l6.html,耗时:1790 ms, 
INFO-> 下载链接:https://1.s91i.faiusr.com/4/AFsIABAEGAAgq8-27AUohsvXxgMwhAc49AM!800x800.png,存储文件名:/Users/fv/Documents/workspace/funtester/long/pic/AFsIABAEGAAgq8-27AUohsvXxgMwhAc49AM!800x800.png

Process finished with exit code 130 (interrupted by signal 2: SIGINT)

有兴趣的可以自己看一下网页的结构,尝试用Selenium等框架也爬一遍试试。


FunTester,腾讯云社区钦定年度作者,非著名测试开发er,欢迎关注。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 脚本
  • 控制台
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档