jsoup实现Java爬虫

使用的jar包
在这里插入图片描述
简单案例:

package web;

import org.apache.commons.io.IOUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

@WebServlet("/img")
public class WServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //根据网址获取它的网页源代码文档对象
        Document doc = Jsoup.connect("https://XXX").get();
        //从文档doc对象找到所有的图片标签img
        Elements es = doc.select("img[src]");
        //遍历得到每一个图片标签
        for (Element e : es) {
        //得到图片的路径
            String src = e.attr("href");
            //将图片路径给下载和储存的方法
                getImg(src);
          

        }
    }

    private void getImg(String imgPath) {
        try {
        //将图片拿到程序中
            InputStream is = new URL(imgPath).openStream();
//将图片储存在自己的本地文件夹中加上毫秒数命名
            FileOutputStream os = new FileOutputStream("D:\\XXXXX/" + System.currentTimeMillis()+".jpg");
            //io工具类对接两个流
            IOUtils.copy(is,os);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

扩展
当然上面的案例只能访问一些本地的资源,如果要真正的爬到东西还需要绕开反爬机制。

Document doc = Jsoup.connect("http://XXXXXX" ).timeout(5000).data(map).proxy(ip, port).ignoreContentType(true).userAgent(ua[i]).header("referer", "http://XXXXXX/").get();
                //找到标签

大家可以从请求发送的数据入手,例如修改userAgent(ua[i]),或者延迟线程执行时间,更换IP等等
在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐