当前位置:首页 > Java

如何用java写爬虫

2026-02-05 15:08:34Java

使用Java编写爬虫的方法

引入必要的依赖库

在Java中编写爬虫通常需要借助一些第三方库,常用的包括Jsoup和HttpClient。Jsoup用于解析HTML,HttpClient用于发送HTTP请求。在Maven项目中,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.3</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

发送HTTP请求

使用HttpClient发送GET请求获取网页内容。以下是一个简单的示例代码:

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 SimpleCrawler {
    public static String fetchPage(String url) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = httpClient.execute(httpGet);
        String content = EntityUtils.toString(response.getEntity());
        response.close();
        httpClient.close();
        return content;
    }
}

解析HTML内容

使用Jsoup解析HTML内容并提取所需数据。以下是一个解析示例:

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

public class HtmlParser {
    public static void parseHtml(String html) {
        Document doc = Jsoup.parse(html);
        Elements links = doc.select("a[href]");
        for (Element link : links) {
            System.out.println("Link: " + link.attr("href"));
        }
    }
}

处理动态内容

对于动态加载的内容,可以使用Selenium WebDriver模拟浏览器行为。以下是一个示例:

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

public class DynamicContentCrawler {
    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();
        driver.quit();
        System.out.println(pageSource);
    }
}

存储爬取的数据

将爬取的数据存储到文件或数据库中。以下是一个存储到文件的示例:

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

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

遵守robots.txt规则

在爬取网站前,检查目标网站的robots.txt文件,确保爬虫行为符合网站的爬取政策。可以使用以下代码检查:

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

public class RobotsChecker {
    public static String checkRobotsTxt(String baseUrl) throws Exception {
        String robotsUrl = baseUrl + "/robots.txt";
        Document doc = Jsoup.connect(robotsUrl).get();
        return doc.text();
    }
}

设置请求头模拟浏览器

为避免被网站屏蔽,可以设置User-Agent等请求头模拟浏览器访问:

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

public class HeaderExample {
    public static Document fetchWithHeaders(String url) throws Exception {
        return Jsoup.connect(url)
                .userAgent("Mozilla/5.0")
                .header("Accept-Language", "en-US")
                .get();
    }
}

处理分页和递归爬取

对于需要分页或递归爬取的网站,可以通过循环或递归方式实现:

public class PaginationCrawler {
    public static void crawlPages(String baseUrl, int maxPages) throws Exception {
        for (int i = 1; i <= maxPages; i++) {
            String pageUrl = baseUrl + "?page=" + i;
            String content = SimpleCrawler.fetchPage(pageUrl);
            HtmlParser.parseHtml(content);
        }
    }
}

异常处理和限速

添加异常处理和限速逻辑,避免频繁请求导致IP被封:

如何用java写爬虫

import java.util.concurrent.TimeUnit;

public class PoliteCrawler {
    public static void politeFetch(String url) throws Exception {
        try {
            String content = SimpleCrawler.fetchPage(url);
            HtmlParser.parseHtml(content);
            TimeUnit.SECONDS.sleep(2); // 限速2秒
        } catch (Exception e) {
            System.err.println("Error fetching URL: " + url);
            e.printStackTrace();
        }
    }
}

通过以上方法,可以构建一个基本的Java爬虫程序。根据实际需求,可以进一步扩展功能,如使用代理IP、处理登录会话等。

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

相关文章

如何用vue实现轮播

如何用vue实现轮播

使用Vue实现轮播 基础实现(基于原生Vue) 创建轮播组件,通过动态绑定v-for和v-show控制显示当前幻灯片: <template> <div class="carou…

react hooks如何用

react hooks如何用

使用 React Hooks 的基本方法 React Hooks 是 React 16.8 引入的功能,允许在函数组件中使用状态和其他 React 特性。以下是几种常用 Hooks 的用法。 use…

如何用react做分页

如何用react做分页

使用 React 实现分页功能 分页是 Web 开发中常见的需求,React 可以通过状态管理和组件化轻松实现分页功能。以下是实现分页的几种方法。 基础分页实现 定义状态 使用 useState…

react项目如何用js改样式

react项目如何用js改样式

使用内联样式 在React中,可以直接通过JavaScript对象定义样式,并将其传递给元素的style属性。样式属性需要使用驼峰命名法(如backgroundColor而非background-co…

React如何用canvas画出人脸

React如何用canvas画出人脸

使用React和Canvas绘制人脸 在React中使用Canvas绘制人脸可以通过以下方法实现。这里以绘制一个简化的人脸为例,涵盖基本的脸部轮廓、眼睛、鼻子和嘴巴。 创建Canvas组件 创建一个…

php爬虫实现

php爬虫实现

PHP爬虫实现方法 使用PHP实现网络爬虫可以通过多种方式完成,以下为常见方法和关键技术点: cURL库基础用法 cURL是PHP中强大的网络请求工具,可用于获取网页内容: $ch = curl_…