当前位置:首页 > Java

java如何做爬虫

2026-03-04 08:46:04Java

使用Jsoup进行简单网页爬取

Jsoup是一个Java库,用于处理HTML文档并从中提取数据。它提供简单的API用于URL抓取和数据解析。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com").get();
        Elements links = doc.select("a[href]");

        for (Element link : links) {
            System.out.println(link.attr("href"));
        }
    }
}

使用HttpClient进行更复杂请求

Apache HttpClient更适合处理需要自定义头信息、Cookie管理和POST请求的场景。

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet request = new HttpGet("https://example.com");

        try (CloseableHttpResponse response = httpClient.execute(request)) {
            String html = EntityUtils.toString(response.getEntity());
            System.out.println(html);
        }
    }
}

处理动态加载内容

对于JavaScript动态生成的内容,需要使用无头浏览器如Selenium WebDriver。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class SeleniumExample {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();

        driver.get("https://example.com");
        String pageSource = driver.getPageSource();
        System.out.println(pageSource);

        driver.quit();
    }
}

数据存储与处理

爬取的数据通常需要存储到数据库或文件中。

import java.io.FileWriter;
import java.io.IOException;

public class DataStorage {
    public static void saveToFile(String data, String filename) throws IOException {
        try (FileWriter writer = new FileWriter(filename)) {
            writer.write(data);
        }
    }
}

遵守robots.txt协议

在爬取前检查目标网站的robots.txt文件,尊重网站的爬取规则。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class RobotsChecker {
    public static void main(String[] args) throws Exception {
        Document robots = Jsoup.connect("https://example.com/robots.txt").get();
        System.out.println(robots.text());
    }
}

处理反爬机制

常见反爬措施包括IP限制、验证码和User-Agent检测。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class AntiCrawler {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com")
            .userAgent("Mozilla/5.0")
            .timeout(5000)
            .cookie("auth", "token")
            .get();
    }
}

使用代理IP

当遇到IP限制时,可以使用代理服务器。

java如何做爬虫

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class ProxyExample {
    public static void main(String[] args) throws Exception {
        System.setProperty("http.proxyHost", "proxy.example.com");
        System.setProperty("http.proxyPort", "8080");

        Document doc = Jsoup.connect("https://example.com").get();
    }
}

标签: 爬虫如何做
分享给朋友:

相关文章

react如何做toast提示

react如何做toast提示

使用 react-hot-toast 库 安装 react-hot-toast 库: npm install react-hot-toast 在应用的根组件中引入 Toaster 组件: impo…

react的组件如何做缓存

react的组件如何做缓存

React 组件缓存的实现方法 在 React 中,可以通过多种方式实现组件缓存以提高性能。以下是几种常见的方法: 使用 React.memo 进行组件记忆化 React.memo 是一个高阶组件,…

react路由如何做权限校验

react路由如何做权限校验

路由权限校验的实现方法 在React应用中实现路由权限校验通常需要结合路由库(如React Router)和状态管理工具(如Redux或Context API)。以下是几种常见的实现方式: 使用高阶…

react如何做title和描述

react如何做title和描述

动态设置页面标题和描述 在React中动态设置页面标题和描述可以通过直接操作document对象或使用第三方库来实现。以下是几种常见方法: 使用原生JavaScript方法 通过直接修改docume…

react 上传组件图片如何做回显

react 上传组件图片如何做回显

实现图片上传与回显 在React中实现图片上传并回显通常需要结合文件输入控件和状态管理。以下是具体实现方法: 使用FileReader API读取图片 创建一个状态变量存储图片数据,通过FileRe…

react里面如何做axios拦截

react里面如何做axios拦截

在React中使用Axios拦截器可以统一处理请求和响应,例如添加认证头、错误处理等。以下是具体实现方法: 创建Axios实例并设置拦截器 import axios from 'axios'…