今天写了个简单的小爬虫,可以获取大部分网站的网站源代码,扒取网站上图片并下载到本地指定目录下,可以作为爬虫学习的入门的例子:
1.获取网页源代码:
public static String getHtmlResourceByURL(String url,String encoding)
{
//声明一个存储网页源代码的容器——字符缓冲区
StringBuffer buffer=new StringBuffer();
//注意涉及流的地方要给其一个初始值
URL urlObj=null;
URLConnection uc=null;
InputStreamReader in=null;
BufferedReader reader=null;
//因为存在网络等原因的连接失败,所以要try,catch抛出异常
try {
//建立网络连接
urlObj=new URL(url);
//打开网络连接
uc=urlObj.openConnection();
//建立网络的输入流
in=new InputStreamReader(uc.getInputStream(),encoding);
//缓冲写入文件流
reader=new BufferedReader(in);
//临时变量
String tempLine=null;
//一行一行的读取文件流
while((tempLine=reader.readLine())!=null)
{
//将数据放入缓冲区
buffer.append(tempLine+"\n");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("连接超时!");
}
//随手关闭流
finally{
if(in !=null)
{
try
{
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.print("关闭出错");
}
}
}
//将buffer(Stringbuffer类型转化为String类型)
return buffer.toString();
}
2. 指定编码,将图片下载到本地·指定文件夹:
/*
* 根据一个图片URL地址,批量下载图片到服务器磁盘filePath
* @param imgURL 要下载的图片服务器地址
* @param filePath 下载保存图片地址
*/
public static void downImages(String imgURL,String filePath)
{
//根据指定路径创建目录
File parent = new File(filePath);
//判断文件夹是否存在
if(!parent.exists()){
parent.mkdirs();
}
//获取图片名字,即截取图片路径最后一个/后面的内容
String fileName=imgURL.substring(imgURL.lastIndexOf("/"));
//获取文件的后缀名
String imgType = imgURL.substring(imgURL.lastIndexOf(".")+1);
try {
//使用java的ImageIO读取指定URL下的图片
BufferedImage image = ImageIO.read(new URL(imgURL));
System.out.println(fileName+","+imgType+","+image);
//在parent目录下创建指定文件名称文件file
File file = new File(parent,fileName);
System.out.println(file.getAbsolutePath());
ImageIO.write(image, imgType, file);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3.测试代码:
public static void main (String args[])
{
String imgSrc=null;
//获取源代码
String htmlResource=
getHtmlResourceByURL("http://www.mooncollege.cn/","utf-8");
System.out.println("源代码为:"+htmlResource);
//解析源代码
Document document=Jsoup.parse(htmlResource);
//获取网页图片
Elements elements=document.getElementsByTag("img");
for(Element element:elements)
{
//jsoup的element的attr(XX)的作用,根据属性取数据
//获取图片相对地址
imgSrc=element.attr("src");
if(imgSrc!="")
{
/*System.out.println("下载图片地址:"+"http://www.163.com/"+imgSrc);*/
System.out.println("下载图片地址:"+imgSrc);
downImages(imgSrc,"./img");
System.out.println("图片下载成功");
}
}
//解析我们需要下载的内容部分
}