6
回答
Jsoup 采集回来的信息出现乱码
华为云实践训练营,热门技术免费实践!>>>   
Document doc = Jsoup.connect(URL)timeout(1000).get(); 
String docStr = doc.toString(); 
String str = new String(docStr.getBytes("ISO8859-1"), "UTF-8"); 
Document document = Jsoup.parse(str);
这样做什么地方有问题呢    采集信息出现乱码,我真是努力了,看了好几个文章都没解决这个问题
举报
wjyy
发帖于5年前 6回/9K+阅

一般出现这个情况是由于url指向的页面,实际编码与html中描述的编码不符导致。如:开发时用的GBK编码编写,但html中却写UTF-8。典型的就是在中文Windows下用记事本,写一个UTF-8的html就会出现这个问题。

你可以不用jsoup.connect,这个会从html描述中识别。

你可以用Jsoup.parse(InputStream in, String charsetName, String baseUri) 的方式从一个流中读取,charsetName选择合适的编码。

如:

String url = "http://xxxxxxx";
Document document = Jsoup.parse(new URL(url).openStream(), "GBK", url);
//你可以试试GBK或UTF-8

p.s.

编码问题: new String(docStr.getBytes("ISO8859-1"), "UTF-8");  方式绝对不是正确解决之道

--- 共有 2 条评论 ---
wjyy谢谢 问题解决 谢谢 5年前 回复
wjyy我也就了,只是没怎么用明白 Jsoup.parse(InputStream in, String charsetName, String baseUri) 可不可以给我说一下这个方法的细节呢 谢谢 5年前 回复
jsoup如果在线程connect会阻塞线程,如果没有链接成功不会执行下面的代码,怎么办
--- 共有 1 条评论 ---
wjyy你的意思是什么,没明白  5年前 回复
我想问有没有别的技术,jsoup这个框架不错,但是抓取比较多的信息量的时候,还是比较慢的,而且只能解析HTML,有些网站设计的有很多js代码动态填到HTML标签中,这个时候就会取不到内容,求回答
--- 共有 1 条评论 ---
wjyyjsoup也可以解析js的 4年前 回复

这里可以解决,主要还是编码设置的问题:http://www.sojson.com/tag_jsoup.html

对于会有乱码的情况下,还是这样比较好。http://www.sojson.com/blog/226.html

    //创建请求
    URL url = new URL("http://www.sojson.com");
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    //默认就是Get,可以采用post,大小写都行,因为源码里都toUpperCase了。
    connection.setRequestMethod("GET");
    //是否允许缓存,默认true。
    connection.setUseCaches(Boolean.FALSE);
    //是否开启输出输入,如果是post使用true。默认是false
    //connection.setDoOutput(Boolean.TRUE);
    //connection.setDoInput(Boolean.TRUE);
    //设置请求头信息
    connection.addRequestProperty("Connection", "close");
    //设置连接主机超时(单位:毫秒)  
    connection.setConnectTimeout(8000);  
     //设置从主机读取数据超时(单位:毫秒)  
    connection.setReadTimeout(8000);    
    //设置Cookie
    connection.addRequestProperty("Cookie","你的Cookies" );
    //开始请求
    Document doc = Jsoup.parse(connection.getInputStream(), "GBK", "http://www.sojson.com");
    //开启您的疯狂选择器模式
    doc.select("div.so >div ~ p:eq(10)>:checked");
    //TODO --- 

 

顶部