java 爬虫在 netbeans 里运行和单独运行结果不一样

在做内容测试的时候,发现我的爬虫(前些文章略有提及)在 netbeans 里面能够成功爬取网页内容,而单独运行时,给定一个 url,爬到的网页却与在浏览器里面打开 url 的网页完全不一样,这是一个很诡异的问题。我在相应位置增加代码,把网页写入某一个文件。结果发现,在 netbeans 里运行和单独运行两次写的文件的编码不一样,一个是 GBK 的编码,一个是 UTF-8  的编码,(我希望爬虫以 UTF-8 的方式运行,考虑到程序里面的字符串和数据库里面的字符串对应,都应该使用 UTF-8 编码)。于是,我猜测,在 netbeans 里面是以 UTF-8 编码方式运行的,而单独运行是以 GBK 的编码方式运行的,当从数据库(UTF-8编码存储)读入一个带中文的 url 时,前者能够正确处理,而后者因为采用 GBK 编码,它以 GBK 的眼光去看待这个 UTF-8 编码的 url,就造成了 url 的扭曲。

如,我想抓取的 url 是

http://news.baidu.com/ns?ct=1&rn=20&ie=utf-8&bs=”湖北法雷奥车灯有限公司”&rsv_bp=1&sr=0&cl=2&f=8&prevct=no&word=”湖北法雷奥车灯有限公司”&tn=newstitle&inputT=0&companyId=21510

它在数据库中以 UTF-8 的方式存储,结果读入一个运行环境为 GBK 语言环境的程序里面,程序会以 GBK 的方式去识别这个 url ,那么,原始 url 在进入程序后,就变成了

http://news.baidu.com/ns?ct=1&rn=20&ie=utf-8&bs=”某些字符”&rsv_bp=1&sr=0&cl=2&f=8&prevct=no&word=”某些字符”&tn=newstitle&inputT=0&companyId=21510

它把原先我要在百度新闻里面搜索的关键串:“湖北法雷奥车灯有限公司”变成了 “某些字符”。(这里的“某些字符”并不是这个字符串本身,而确实指某些字符)

显然它并不能按我所想的去访问某个网页,因此,相当于它会去搜索一些稀奇古怪的内容。

在单独运行一个 jar 时,加上 -Dfile.encodeing=UTF-8  的选项,即是选择使用 UTF-8 的环境去运行这个程序。

如:

java -Dfile.encoding=UTF-8 -jar Spider.jar

标签