各位好:
     我现在写一个java网络爬虫,在下载网页的时候遇到了问题。
     我在抓取网页的时候,以UTF8格式读取网页内容(网页所有内容,未剔除html标签)并写入到本地文件,作为后期索引的源数据。
     由于各网站的编码格式不统一,甚至一个网站的不同页面也有编码不统一的情况,因此我下载的网页中有很多网页都是乱码。问题:我现在想在已获得的网页数据中提取网页编码字段,就是这行:<meta http-equiv="Content-Type" content="text/html; charset=gbk" />,但是不会写正则表达式,求指点...ps:1.如果有其他方法可以获得网页编码,也请回贴告知...
   2.我在使用多线程的时候也有点问题,就是有时候线程开的多了反而会影响下载速度(我对每个站点一个开主线程,每个主线程下再开多个线程同时下载此站点的网页),如何合理的分配线程?
   3.抓取iteye网页的时候被封ip,如何避免这种情况?急求高手指点,谢谢!

解决方案 »

  1.   

    String content="<html xmlns=\"http://www.w3.org/1999/xhtml\">\n" +
                    "<head>\n" +
                    "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n" +
                    "<meta content=\"求助 java获 html网页编码字段 正则表达式 Java Web 开发\" name=\"Keywords\"/>...\n";
            Pattern pattern=Pattern.compile("<meta\\s+http-equiv=\"Content-Type\"\\s+content=\"[\\s\\S]*?charset=(\\S+?)\"/>");
            Matcher matcher=pattern.matcher(content);
            if(matcher.find()){
                System.out.println(matcher.group(1));
            }