Java 爬虫逃走了”;我的域名#!第条;变成;mydomain?“转义”片段“=article”;,如何检索原始url?
好的,下面是谷歌所说的() 当爬虫看到这样的urlJava 爬虫逃走了”;我的域名#!第条;变成;mydomain?“转义”片段“=article”;,如何检索原始url?,java,gwt,Java,Gwt,好的,下面是谷歌所说的() 当爬虫看到这样的urlwww.example.com/ajax.html#!key=value,它将临时将该url转换为www.example.com/ajax.html?\u转义\u片段\u=key=value 但是,在进行转换时,它也会转义片段中的某些字符。前任: www.example.com/ajax.html!!键=值;car=%到www.example.com/ajax.html?\u转义\u片段\u=key=value;车辆=%25 因此,如果我们想转换
www.example.com/ajax.html#!key=value
,它将临时将该url转换为www.example.com/ajax.html?\u转义\u片段\u=key=value
但是,在进行转换时,它也会转义片段中的某些字符。前任:
www.example.com/ajax.html!!键=值;car=%
到www.example.com/ajax.html?\u转义\u片段\u=key=value;车辆=%25
因此,如果我们想转换www.example.com/ajax.html?\u转义\u片段\u=key=value;car=%25
返回到原始url,然后我们需要取消片段中所有%XX个字符的替换
谷歌表示:
注意:爬虫在执行过程中会转义片段中的某些字符
转变。要检索原始片段,请确保
取消片段中所有%XX个字符的扫描。更具体地说,是%26
应变成&、%20应变成空格、%23应变成#和
%25%应该变成%,以此类推
但谷歌没有说明如何在java中做到这一点
String originalUrl=changedStr.replace("?_escaped_fragment_=", "!#");
// then what to do next so that all the escaped characters will go back to normal?
这样做可以吗
originalUrl=java.net.URLDecoder.decode(originalUrl, "UTF-8");
我们必须使用哪一个:“UTF-8”或“ASCII”
因此,当爬虫转义url时,它是否使用url.encode()
如果是,那么它使用的是“UTF-8”还是“ASCII”?您可能想看看。您特别感兴趣的是最后的函数rewriteQueryString
关键是你在正确的轨道上,关键是调用urldecker.decode
;您可能还对它周围的包装器代码感兴趣