java 爬虫

该博客介绍了一种使用Jsoup库从特定网页抓取并下载所需素材的方法。代码示例展示了如何建立HTTP连接,解析HTML,查找特定元素,特别是含有图片的`<a>`标签,然后下载这些图片。过程中还涉及到了处理反爬机制,通过设置User-Agent避免被识别为机器人。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据吾爱破解的一个大佬写的之后改了一下,爬的我需要的素材。
测试地址 https://www.loggly.com/docs-index/log-sources/
里面大部分注释也是大佬写的,很简单,和js差不多感觉

 <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>
package com.plan.plan;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 * ClassName: pc
 * Description:
 * date: 2021/9/27 18:04
 *
 * @author robotname a
 * @author dev whz
 * @since JDK 1.8
 */
public class pc {
    public static void main(String[] args) throws IOException {
        long t1=System.currentTimeMillis();
        //访问目标网址
        Connection connection1=Jsoup.connect("https://www.loggly.com/docs-index/log-sources/");
        //连接成功后获取Document对象
        Document document1= connection1.get();
        Element elementDiv=document1.selectFirst("[class=log-sources]");

        Element elementDiv1=elementDiv.selectFirst("[class=container]");//搜索class=cl r   标签
        Element elementUL=elementDiv1.selectFirst("[class=row]");
        Element elementUL1=elementUL.selectFirst("[class=col-sm-8]");

        Elements elements=null;
        try {
            Thread.sleep(5000);
             elements=elementUL1.getElementsByClass("log-sources__main");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Elements elementUL1mainlist=elements.select(".log-list");
        Elements elementLis=elementUL1mainlist.select(".log-list__item");//通过找到的ul 搜索ul里面的所有li标签
        for(Element elementLi:elementLis) {//遍历所有找到的li
            Element elementA=elementLi.selectFirst("a");//搜索li里的a标签
            String name=elementA.attr("href");
            Elements elements1log__front=elementA.getElementsByClass("log__front");
            Elements select = elements1log__front.select("img[src]");
            String src2=null;

            String divName= String.valueOf(System.currentTimeMillis());

            for(Element element:select){
                String src=element.attr("abs:src");//获取src的绝对路径
                 src2=element.attr("src");//获取src的绝对路径
           //好像有反爬虫机制 所以加了这个代码
//             参考          https://www.cnblogs.com/xijieblog/p/4540026.html
                URL url=new URL(src2);
                url = new URL(src2);
                HttpURLConnection connection = (HttpURLConnection) url.
                        openConnection();
                connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

                InputStream is=url.openStream();

                FileOutputStream fos=new FileOutputStream("D:\\date\\test"+"//"+divName+".png");

                byte[] b=new byte[2048];
                int count=is.read(b);
                while(count!=-1) {
                    fos.write(b,0,count);
                    fos.flush();
                    count=is.read(b);
                }
                fos.close();
                is.close();
            }
            }

        long t2=System.currentTimeMillis();
        double a=(t2-t1)/1000;
        System.out.println("下载完毕"+"用时:"+a+"s");
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值