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