我已将Apache Nutch 2.3.1配置为Hadoop生态系统。我必须取一些人 - 阿拉伯语脚本网站。 Nutch在获取时为几个URL提供例外。以下是一个示例异常
java.lang.IllegalArgumentException: Invalid uri 'http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html': escaped absolute path not valid
at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:222)
at org.apache.commons.httpclient.methods.GetMethod.<init>(GetMethod.java:89)
at org.apache.nutch.protocol.httpclient.HttpResponse.<init>(HttpResponse.java:77)
at org.apache.nutch.protocol.httpclient.Http.getResponse(Http.java:173)
at org.apache.nutch.protocol.http.api.HttpBase.getProtocolOutput(HttpBase.java:245)
at org.apache.nutch.fetcher.FetcherReducer$FetcherThread.run(FetcherReducer.java:564)
答案 0 :(得分:2)
即使在1.x分支上,我也能够重现这个问题。问题是Apache HTTP客户端库在内部使用的Java URI类不支持非转义的UTF-8字符:
来自java.net.URI
的JavaDoc文档:
字符类别
RFC 2396精确指定了URI引用的各个组件中允许哪些字符。以下类别(大部分取自该规范)在下面用于描述这些约束:
- alpha US-ASCII字母字符,&#39; A&#39;通过&#39; Z&#39;和&#39; a&#39;通过&#39; z&#39;
- 数字 US-ASCII十进制数字符,&#39; 0&#39;通过&#39; 9&#39;
- alphanum 所有字母和数字字符 未保留所有的alphanum字符以及字符串中的字符&#34; _-!。〜&#39;()*&#34;
- punct 字符串中的字符&#34;,;:$&amp; + =&#34;
- 保留所有符号字符和字符串中的字符&#34;?/ [] @&#34;
- 转义转义的八位字节,即由百分号(&#39;%&#39;)组成的三元组,后跟两个十六进制数字(&#39; 0&#39; - & #39; 9&#39;,&#39; A&#39; - &#39; F&#39;和&#39; a&#39; - &#39; f&#39;)
- 其他不在US-ASCII字符集中的Unicode字符不是控制字符(根据
Character.isISOControl
方法),并且不是空格字符(根据Character.isSpaceChar
方法)(与RFC 2396的偏差,仅限于US-ASCII)所有合法URI字符集由未保留,保留,转义和其他字符组成。
正确转义的网址看起来更像是:
实际上,如果您在Chrome上打开示例网址,然后从地址栏中复制该网址,您将获得转义的代表。随意为此打开一个问题(否则我会这样做)。与此同时,您可以尝试使用不使用Apache HTTP客户端的protocol-http
插件。我在本地测试过,parsechecker工作正常:
➜ local (master) ✗ bin/nutch parsechecker "http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html"
fetching: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
robots.txt whitelist not configured.
parsing: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
contentType: text/html
signature: 048b390ab07464f5d61ae09646253529
---------
Url
---------------
http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
---------
ParseData
---------
Version: 5
Status: success(1,0)
Title: پیچ بند بادی هفتیری 1800 دور بادی جیسون-نیازمندی سفیرک
Outlinks: 76
outlink: toUrl: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html anchor:
outlink: toUrl: http://agahi.safirak.com/assets/fonts/font-awesome/css/font-awesome.min.css anchor:
outlink: toUrl: http://agahi.safirak.com/assets/css/bootstrap.css anchor:
...