同事用Java做了一个抓取任意网页的标题的功能,由于任意网页的HTML的head中meta中指定的charset五花八门,比如常用的utf-8,gbk,gb2312。

自己写代码处理,短时间内,发现各种情况太难考虑周全,总是抓取乱码。面临的挑战:也可能有meta也可能没meta,即使有meta也可能大写也可能小写,即使大小写搞定也可能带空白字符,总之各种意想不到。不过呢,搜索引擎爬虫抓到的网页咋就不会乱码呢?

百度查这个问题基本无解,bing查这个问题也是无用功居多,只好开上蓝灯上谷歌,三个备选方案:

1.上StackOverflow看是否有最佳答案

http://stackoverflow.com/questions/10996726/encoding-of-response-is-incorrect-using-apache-httpclient

Stackoverflow上说如果HTTP client组件不支持,common http也不支持的话,Spring's RESTTemplate能干这事。我查了查有点玄。

2.把HTML的元素模型化,提取模型。

http://docs.oracle.com/cd/B28359_01/appdev.111/b28394/adx_j_parser.htm

用Oralce的XML Developer's Kit,Example里包含一个操作XML的DOM的AutoDetectEncoding.java类,挺欣喜,可惜下载XDK和这个Example有点费劲。但是后来比较一下XML和HTML的编码元素及方式确实不一样,虽然HTML可以认为是特殊的XML,都是遵循DOM模型,但是DOM不同的Level,水很深,发现也是路选歪了。

3.使用类似搜索殷勤的爬虫程序或组件,还得是java的。

http://www.huqiwen.com/2012/05/03/use-jsoup-analytics-html-document/

这个帖子原作者也说了原来都是htmlparser,后来都鸟枪换炮用jsoup了。炮果然比枪好用。中间还从CSDN找到一个网友的帖子,愿意提供自己在gitbub上开源爬虫,测测网页说是能行,就是会死机,让我怎么用,不能给自己埋雷,宁可不解决。试用jsoup,发现它既是最爱了。

Java抓任意网页标题乱码jsoup解决方案一例的更多相关文章

  1. HttpClient+Jsoup 抓取网页信息(网易贵金属为例)

    废话不多说直接讲讲今天要做的事. 利用HttpClient和Jsoup技术抓取网页信息.HttpClient是支持HTTP协议的客户端编程工具包,并且它支持HTTP协议. jsoup 是一款基于 Ja ...

  2. java抓取网页数据,登录之后抓取数据。

    最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一 ...

  3. Java 抓取网页中的内容【持续更新】

    背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...

  4. Java抓取网页数据(原网页+Javascript返回数据)

    有时候由于种种原因,我们需要采集某个网站的数据,但由于不同网站对数据的显示方式略有不同! 本文就用Java给大家演示如何抓取网站的数据:(1)抓取原网页数据:(2)抓取网页Javascript返回的数 ...

  5. Java抓取网页数据(原来的页面+Javascript返回数据)

    转载请注明出处! 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同 ...

  6. 使用JAVA抓取网页数据

    一.使用 HttpClient 抓取网页数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  7. java 抓取网页图片

    import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...

  8. Jsoup一个简短的引论——采用Java抓取网页数据

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/40115479 概述 jsoup 是一款Java 的HTML解析器,可直接解析某个U ...

  9. 走过路过不要错过~教你用java抓取网页中你想要的东东~~

    学习了正则之后,打算用java玩一玩,所以就决定用它来实现一个好玩的idea import java.io.BufferedReader; import java.io.IOException; im ...

随机推荐

  1. 转://oracle 11gR2 oracle restart 单机使用asm存储 主机名发生更改处理过程

    oracle 11gR2 oracle restart 单机使用asm存储 主机名发生更改并且主机重启后处理过程: 以下为解决方案: 1. Remove Oracle Restart configur ...

  2. Excel里面Left这个怎么用?

    LEFT 返回文本字符串中第一个字符或前几个字符LEFT(A2, 4)LEFT 返回前 4 个字符,因为每个字符按 1 计数.无论您计算机上的默认语言设置如何,函数 LEFT 都返回前 4 个字符.

  3. 转载 线程初步了解 - <第一篇>

    操作系统通过线程对程序的执行进行管理,当操作系统运行一个程序的时候,首先,操作系统将为这个准备运行的程序分配一个进程,以管理这个程序所需要的各种资源.在这些资源之中,会包含一个称为主线程的线程数据结构 ...

  4. PAT A1153 Decode Registration Card of PAT (25 分)——多种情况排序

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  5. Objective-C GCD深入理解

    GCD(Grand Central Dispatch),主要用于多线程编程.它屏蔽了繁琐的线程实现及管理细节,将其交由系统处理.开发者只需要定义任务block(在底层被封装成dispatch_cont ...

  6. Objective-C 在main函数之前的过程

    main函数是我们所熟知的程序入口,Java.Python.C++等,虽语法各异,但皆是如此.然而,程序真正的起点并非main函数,在此之前,就已经干了很多事情. 1.在main函数打个断点,从调用栈 ...

  7. java Scanner类的使用

    参考链接:https://blog.csdn.net/android_depon/article/details/69669160     https://www.cnblogs.com/zhengc ...

  8. 动手动脑(lesson 6)

    一.继承条件下的构造方法调用 运行结果: 二. 答:构造函数的主要作用是初始化环境,子类是继承的父类,也就是说父类中有的子类全都有,而子类中有的父类不一定有,因此子类运行会调用父类构造函数,而父类不可 ...

  9. CAN协议教程

    介绍:CAN总线 CAN总线是广播类型的总线.这意味着所有节点都可以侦听到所有传输的报文.无法将报文单独发送给指定节点:所有节点都将始终捕获所有报文.但是,CAN硬件能够提供本地过滤功能,让每个节点对 ...

  10. Linux安装RabbitMq-Centos7版本

    一.Linux系统中安装RabbitMQ 由于RabbitMQ依赖于Erlang,所以先要在机器上安装Erlang环境 单机版 1.安装GCC GCC-C++ Openssl等模块 yum -y in ...