同事用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. 【洛谷】【动态规划/01背包】P2925 [USACO08DEC]干草出售Hay For Sale

    [题目描述:] 约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草. 顿因有H(1≤H≤5000)包干草,每一包都有它 ...

  2. eclipse 自动创建web.xml

    eclipse 自动创建web.xml 以前每次创建web项目的时候,总是从其他的项目中拷贝一个web.xml文件到新项目,然后改吧改吧就可以了,但是这终究是一件麻烦的事,要是能够通过软件自动创建,那 ...

  3. go协程

    一.并发&并行 一个应用程序  ---> 一个进程 ---> 运行在自己内存地址空间里的独立执行体 ---> 同一个内存地址空间的一起工作的多个线程 一个并发程序 ---&g ...

  4. Spring Component注解处理过程

    接下来: org.springframework.context.annotation.ComponentScanBeanDefinitionParser#parse方法展开加载过程:

  5. 20145236《网络攻防》 Exp3 免杀原理与实践

    20145236<网络攻防> Exp3 免杀原理与实践 一.基础问题回答 1.杀软是如何检测出恶意代码的? 恶意代码有其特有的特征码,杀软将特征码加入检测库中,当检测到一段代码中具有这样的 ...

  6. Shell命令解析

    1.简单语法: 执行shell:                                sh executeTest.sh puttyy上跑java:                      ...

  7. How enable deprecated functions in Qt5

    问题:Qt5中如何启用以 QT_DEPRECATED_SINCE标识的已经废弃/过时的方法? I want to port a Qt4 program to Qt5 and some function ...

  8. warning: ISO C++ forbids converting a string constant to 'char*'

    第1种字符串赋值方式: char * fileName="./2017-09-02-10-34-10.xml";//这一种字符串赋值方式已经被ISO禁止了 第2种字符串赋值方式: ...

  9. 利用H5本地存储localStorage、sessionStorage

    最近的业务处理上,要使用cookie缓存储一下数据,公司的cookie还搞出点问题.而用户的浏览器都是利用微信的内置,普遍支持h5的本地存储.于是利用了这个... 现代浏览器普遍开始支持H5本地存储, ...

  10. sql语句——行列互换

    SELECT 年份, SUM(case when 季度=1 then 销量 else 0 end) as 一季度, SUM(case when 季度=2 then 销量 else 0 end) as ...