You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JSoup保留纯文本页面换行?以robots.txt为例

解决JSoup抓取robots.txt内容合并为一行的问题

你遇到的问题其实是因为JSoup本质是HTML/XML解析器,它会把纯文本格式的robots.txt当成HTML来处理——HTML里的换行、多余空白会被自动合并成单个空格,所以最终拿到的body内容就是一行。要解决这个问题,我们需要绕开JSoup的HTML解析逻辑,直接获取robots.txt的原始纯文本内容,再逐行处理。

步骤1:获取robots.txt的原始纯文本

使用JSoup的connect()方法时,加上ignoreContentType(true),这样JSoup就不会因为内容类型不是HTML而报错,而是直接返回原始的响应内容:

import org.jsoup.Connection;
import org.jsoup.Jsoup;

public class RobotsParser {
    public static void main(String[] args) throws Exception {
        String targetUrl = "https://example.com/robots.txt";
        // 建立连接并忽略内容类型,获取原始响应
        Connection.Response response = Jsoup.connect(targetUrl)
                .ignoreContentType(true)
                .execute();
        // 获取原始的纯文本内容
        String robotsRawContent = response.body();
    }
}

步骤2:将内容分割为单独的行

不同系统的换行符可能是\n(Unix/Linux)或\r\n(Windows),所以用正则表达式\\r?\\n来分割可以兼容所有情况:

// 分割成每行
String[] lines = robotsRawContent.split("\\r?\\n");

// 遍历每行验证效果
for (String line : lines) {
    System.out.println(line);
}

步骤3:逐行执行正则表达式操作

现在你可以针对每行内容做正则处理了,比如提取所有Disallow规则,或者过滤注释行:

示例:提取所有Disallow路径

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// 定义匹配Disallow规则的正则(忽略大小写)
Pattern disallowPattern = Pattern.compile("^Disallow:\\s*(.*)$", Pattern.CASE_INSENSITIVE);

for (String line : lines) {
    String trimmedLine = line.trim();
    // 跳过空行和注释行
    if (trimmedLine.isEmpty() || trimmedLine.startsWith("#")) {
        continue;
    }
    // 匹配Disallow规则
    Matcher matcher = disallowPattern.matcher(trimmedLine);
    if (matcher.find()) {
        String disallowedPath = matcher.group(1);
        System.out.println("找到禁止爬取的路径: " + disallowedPath);
    }
}

关键注意点

  • 不要直接用Jsoup.connect(url).get().body().text(),因为这个方法会触发JSoup的HTML解析,自动合并空白和换行。
  • ignoreContentType(true)是必须的,否则JSoup会因为robots.txt是text/plain类型而抛出异常。

内容的提问来源于stack exchange,提问作者Eumcoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:17:23