记一下特殊节日爬取微博表情包

1.起因:

今天是有趣的一天,她只说找到12年的老接口,很多喜欢的图片都没有;我想随便对她说随便找个图片吧,她说用户需要,没办法那我就试试吧
在这里插入图片描述在这里插入图片描述

2.经过

研究了一下微博官网
在这里插入图片描述
起初感觉很好爬,我直接正则匹配 <img src开头到>结尾然后提取出url地址不就行了吗?然而出乎我的意料的是要弄一个get请求才行,https://weibo.com/ajax/log/action?type=pic&uicode=20000401&fid=232174&act_code=4874&ext=module%3A01&luicode=&t=1644817383343

在这里插入图片描述
在这里插入图片描述
没办法,我太菜了不能直接根据dom来设置显示再来爬虫。然后我分析了一下network中img请求,发现表情包的地址这不是出来了吗?然后我百度搜索能不能直接直接下载呢,发现不能,可以根据游览器缓存找到他们,然而我也不知道怎么操作。没办法为了节日的快乐,只有费体力了,等等,我突然想到利用批量下载可以省力,那我就干吧。
在这里插入图片描述
首先我建立一个url.txt把图片的地址一行行保存下来,然后使用我的java语言爬虫。

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class DownloadPicFromURL {
    public static void main(String[] args) throws IOException {
        // 文件夹路径
        String path = "C:\\Users\\11209\\Desktop\\生信\\url.txt";
        List<String> scanListPath = readFile02(path);
        scanListPath.forEach(url->{
            System.out.println(url);
            String imageName =  "C:\\Users\\11209\\Desktop\\生信\\img_down\\"+url.substring(url.lastIndexOf("/")+1);
            downloadPicture(url,imageName);
        });

    }

    /**
     * 读取一个文本 一行一行读取
     *
     * @param path
     * @return
     * @throws IOException
     */
    public static List<String> readFile02(String path) throws IOException {
        // 使用一个字符串集合来存储文本中的路径 ,也可用String []数组
        List<String> list = new ArrayList<String>();
        FileInputStream fis = new FileInputStream(path);
        // 防止路径乱码   如果utf-8 乱码  改GBK
        // eclipse里创建的txt  用UTF-8,在电脑上自己创建的txt  用GBK
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null) {
            // 如果 t x t文件里的路径 不包含---字符串       这里是对里面的内容进行一个筛选
            if (line.lastIndexOf("---") < 0) {
                list.add(line);
            }
        }
        br.close();
        isr.close();
        fis.close();
        return list;
    }

    //链接url下载图片
    private static void downloadPicture(String urlList,String path) {
        URL url = null;
        try {
            url = new URL(urlList);
            DataInputStream dataInputStream = new DataInputStream(url.openStream());
 
            FileOutputStream fileOutputStream = new FileOutputStream(new File(path));
            ByteArrayOutputStream output = new ByteArrayOutputStream();
 
            byte[] buffer = new byte[1024];
            int length;
 
            while ((length = dataInputStream.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
            fileOutputStream.write(output.toByteArray());
            dataInputStream.close();
            fileOutputStream.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这是效果。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值