• 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

  • 相关阅读:
    第35条:注解优先于命名模式
    Apache Shiro入门实例
    第34条:用接口模拟可伸缩的枚举
    Lua数组排序
    C++多态性的理解
    爱推软件
    VMProtect使用小计【一】
    android软件开发之webView.addJavascriptInterface循环渐进【二】
    cocos2dx如何添加popScene的场景动画
    Cocos2d-x 3.0 cocostudio骨骼动画的动态换肤
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7055305.html
Copyright © 2020-2023  润新知