直接给出代码。
该代码可以直接获取网页全部内容,且能够很好解决中文的乱码问题。
//获取url 返回字符串 解决中文乱码问题
public static String Gget(String url1) {
CloseableHttpClient httpclient = HttpClients.createDefault();
String context = "";
try {
URL url = new URL(url1);
URI uri = new URI(url.getProtocol(), url.getHost() + ":" + url.getPort(), url.getPath(), url.getQuery(), null);
// 创建httpget.
HttpGet httpget = new HttpGet(uri);
// System.out.println("executing request " + httpget.getURI());
// 执行get请求.
CloseableHttpResponse response = httpclient.execute(httpget);
// 获取响应实体
HttpEntity entity = response.getEntity();
// System.out.println("--------------------------------------");
// 打印响应状态
System.out.println(response.getStatusLine());
if (entity != null) {
// 打印响应内容 ,转换为utf-8格式,避免所传内容包含汉字乱码
context = EntityUtils.toString(entity, "UTF-8");
// System.out.println(context);
}
response.close();
return context;
} catch (Exception e) {
e.printStackTrace();
return "Exception";
} finally {
// 关闭连接,释放资源
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在主函数中运行。将爬取的所有数据放入String类型变量中打印。
可以看到已经获取网页所有的元素。
对于后续的数据处理,可以使用正则表达式来对String中的内容进行提取。
后续的正则匹配,可以使用如下代码。
接口中的rex为传入的正则表达式,w为所需匹配的文本。返回值为Vector。匹配失败意味着返回的Vector的length为0。
// 正则匹配
public static Vector<String> GetMatch(String w, String rex) {
Pattern p = Pattern.compile(rex);
Matcher m = p.matcher(w);
Vector<String> ans = new Vector<String>();
while (m.find()) ans.add(m.group(0));
return ans;
}