刚开始学《自己动手写网络爬虫》,只实现了第一部分的内容。现在做一个总结。
这本书中主要用到了HttpClient和HtmlParser这两个开源的jar包。同时,还要依赖codec.这个开源包。
HttpClient用的是3.x版本的。HtmlParser用的是1.4版本的。
两个版本的可以在官网上下载。也可以在我的百度网盘上下载。
链接为:http://pan.baidu.com/s/1jHBeA82
提取码为:uo3u
在运行的过程中,会出现两个问题。
第一个:
org.htmlparser.util.EncodingChangeException: character mismatch (new: 进 != old: è) for encoding change from ISO-8859-1 to UTF-8 at character offset 5159
通过查阅网络和看代码,发现是类Page中SetEncoding方法中一下代码的问题:
for (int i = 0; i < offset; i++)
if (new_chars[i] != buffer[i])
throw new EncodingChangeException ("character mismatch (new: "
+ new_chars[i]
+ " != old: "
+ buffer[i]
+ ") for encoding change from "
+ encoding
+ " to "
+ character_set
+ " at character offset "
+ offset);
}
注释掉这部分代码即可。 修改之后的HtmlParser命名为HtmlParser1.4Revision, 在上述百度云盘中可以下载。
第二个问题:
Exception in thread “main” java.lang.IllegalArgumentException: Invalid uri http://image.baidu.com/search/index?ct=201326592&cl=2&st=-1&lm=-1&nc=1&ie=utf-8&tn=baiduimage&ipn=r&rps=1&pv=&fm=rs1&word=%E9%9D%92%E5%B1%B1%E7%BB%BF%E6%B0%B4%E5%A4%A7%E8%87%AA%E7%84%B6%E9%A3%8E%E6%99%AF&hs=0%A1%C5iquery%3D%25E9%25A3%258E%25E6%2599%25AF%25E5%25A4%25A7%25E5%259B%25BE%25E7%2589%2587∨iquery=%25E7%25BE%258E%25E5%25BE%2597%25E8%25AE%25A9%25E4%25BA%25BA%25E7%25AA%2592%25E6%2581%25AF%25E7%259A%2584%25E9%25A3%258E%25E6%2599%25AF&ofr=%25E7%25BE%258E%25E5%25BE%2597%25E8%25AE%25A9%25E4%25BA%25BA%25E7%25AA%2592%25E6%2581%25AF%25E7%259A%2584%25E9%25A3%258E%25E6%2599%25AF&sensitive=0’: Invalid query
主要问题在于URI这个类。在java中也有这个类。通过对比发现,httpclient中的URI只能接受ASCII码的uri。如果uri中出现可见的非ASCII字符,则会报出上面的错误。
修改之后,修改后的命名为HttpClient3.1Revision。在上述百度网盘中可以下载。