簡體   English   中英

HTML + Java + jsoup中的響應

[英]html response in java + jsoup

我正在使用Java並使用JSoup來獲取網頁的響應。

當我在html文件中打印文檔時,無法按原樣獲取頁面。 原因是它看起來在錯誤的路徑的CSS和JS。

這是回應

    <link href="../Style/STYLE.css" rel="stylesheet" type="text/css">
    <link href="../Style/NKN.css" rel="stylesheet" type="text/css">
    <link href="../Style/main.css" rel="stylesheet" type="text/css">
    <script src="../Script/Validation.js" type="text/javascript"></script> 
    <script src="../Script/grid.js" type="text/javascript"></script> 
    <script src="../Script/api.js" type="text/javascript"></script> 

當我在網頁視圖源中查找並單擊CSS時,它會轉到其他網址,如下所示:

    <link href="http://www.url.com/Style/STYLE.css" rel="stylesheet" type="text/css">
    <link href="http://www.url.com/Style/NKN.css" rel="stylesheet" type="text/css">
    <link href="http://www.url.com/Style/main.css" rel="stylesheet" type="text/css">
    <script src="http://www.url.com/Script/Validation.js" type="text/javascript"></script> 
    <script src="http://www.url.com/Script/grid.js" type="text/javascript"></script> 
    <script src="http://www.url.com/Script/api.js" type="text/javascript"></script> 

我找到了一種使用Jsoup和Elements來獲取絕對URL的方法,如下所示:

    Elements links = document.select("link[href]");
    for (Element link : links) {
      system.out.println(link.attr("abs:href"));
    }

但這僅對迭代和打印鏈接有用,該如何替換響應文檔。

只需使用replaceAll()方法即可將所有href =“ ..替換為鏈接

    String response = getResponse(); //assuming that gerResponse is your function returning response of webpage
    String withLinks = response.replaceAll("href=\"..", "href=\"http://www.url.com");

您也可以為src等執行此操作


編輯:如果您需要刪除URL的最后一部分(帶有參數的腳本名稱),則可以從開始到最后一個“ / ”符號獲取子字符串

    response = response.subString(0, response.lastIndexOf("/"))

然后替換所有網址

我通過以下方式找到了解決方案,

我在每個字符串值中都獲得href和src的正則表達式值,如果存在的話,我正在創建新的URL並將其替換為新的URL。

    Pattern patternHref = Pattern.compile(" href=\"(.*?)\"", Pattern.CASE_INSENSITIVE);
    Pattern patternSrc = Pattern.compile("src=\"(.*?)\"", Pattern.CASE_INSENSITIVE);

    Matcher matcher = patternSrc.matcher(eachResponseString);
    if (matcher.find()) {
        URL aa = new URL(url2, (matcher.group(1)));
        eachResponseString = patternUrl.matcher(eachResponseString).replaceAll(
                "(" + aa + ")");
        writer.write(eachResponseString);

    Matcher matcher1 = patternHref.matcher(eachResponseString);
    if (matcher1.find()) {
        URL aa = new URL(url2, (matcher.group(1)));
        eachResponseString = patternUrl.matcher1(eachResponseString).replaceAll(
                "(" + aa + ")");
        writer.write(eachResponseString);

這樣,一切正常。

希望這對其他人也有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM