今天晚上,帮我一个同门师兄,解决一下问题.
题目是,抓取一个网站的所以页面,并抓下这些页码的所有网址.
代码如下:
package com.hwp.test;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SearchEngine
{
private Map<String, List<String>> pageNameUrls;
public SearchEngine()
{
pageNameUrls = new HashMap<String, List<String>>();
}
private String getContent(String httpUrl)
{
String htmlCode = "";
try
{
InputStream in;
URL url = new java.net.URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/4.0");
connection.connect();
in = connection.getInputStream();
byte[] buffer = new byte[512];
int length = -1;
while ((length = in.read(buffer, 0, 512)) != -1)
{
htmlCode += new String(buffer, 0, length);
}
}
catch (Exception e)
{}
if (htmlCode == null)
{
return "";
}
return htmlCode;
}
private List<String> getPageUrls(String page)
{
List<String> urls = new ArrayList<String>();
String content = this.getContent(page);
String reg = "http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(content);
String url = "";
while (matcher.find())
{
url = matcher.group();
if (!urls.contains(url))
{
urls.add(url);
}
}
return urls;
}
public void test(String url, String baseUrl)
{
String content = this.getContent(url);
// System.out.println(content);
String reg = "(" + baseUrl
+ "(/[\\w-]+)*(/[\\w-]+\\.(htm|html|xhtml|jsp|asp|php)))";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(content);
while (matcher.find())
{
String tempUrl = matcher.group();
if (!this.pageNameUrls.containsKey(tempUrl))
{
//System.out.println(tempUrl);
this.pageNameUrls.put(tempUrl, this.getPageUrls(tempUrl));
test(tempUrl, baseUrl);
}
}
}
public static void main(String[] args)
{
String url = "http://www.blogjava.net";
String baseUrl = "http://www.blogjava.net";
SearchEngine se = new SearchEngine();
se.test(url, baseUrl);
Map<String, List<String>> map= se.pageNameUrls;
Set<Map.Entry<String, List<String>>> set = map.entrySet();
for(Map.Entry<String, List<String>> entry: set)
{
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
}
分享到:
相关推荐
抓网页数据包工具,让你分析网页数据的信息内容
一款通过网址抓取网页的小软件,得到的是网页可以经过PHOTOSHOP加工后使用
抓网页(zh).rar C#
抓网页工具
site sucker mac下的抓网页软件,非常好用,设置路径层次后自动抓取,速度也很快
抓网页获取本机ip地址java.pdf
抓网页获取本机ip地址java参考.pdf
抓网页获取本机ip地址java实用.pdf
这是一款专用于抓网页的软件,用它能把某个网页保存为JPG格式。
一把抓是一款可以帮助用户提取完整网站内容的工具。用户可以下载网站单个页面或多个页面,包括JS、CSS、图片、背景图片、音乐、Flash 一把抓 特点: 1、一键下载页面所有内容,并自动更换网络链接为本地链接 2、...
http://www.nfd.com.tw/house/year/2010.htm 采集的这里数据
抓取网页数据部分函数,如:getProperty()
本文利用 C# 和 .NET 提供的类来轻松创建一个抓取网页内容源代码的程序
python抓取网页数据入门知识,资料来源于网上共享
提供全屏捕捉、 窗口或控件捕捉、扩展窗口捕捉、区域捕捉、超长网页捕捉、网页元素捕捉、 视频捕捉等强大功能,支持使用鼠标手势或快捷键启动捕捉,支持自动保存, 可选择多种保存格式。支持自动升级...
网页抓包数据分析工具
arm下抓包工具 Linux version 4.14
NULL 博文链接:https://zsp.iteye.com/blog/261132