[英]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.