Java爬取网站源代码和链接代码实例
1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
所以主要使用递归遍历完成对每个网页内链接的获取和源码的获取,然后剔除重复链接
数据爬取后主要使用txt文件储存,根据网址的路径生成想应文件路径
2.代码
packagecom.test;
importjava.io.*;
importjava.net.URL;
importjava.net.URLConnection;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
/**
*java实现爬虫
*/
publicclassSpiderDemo1{
//网站主网页链接
privatefinalstaticStringtheURL="http://www.jyyishu.cn";
//今日日期,用于标记日志
privatefinalstaticStringtheTIME=newSimpleDateFormat("yyyy-MM-dd").format(newDate());
//网页链接文件路径
privatefinalstaticStringtheFILE="L:/html/jy1/"+theTIME+"/URL.txt";
//网页源码路径
privatefinalstaticStringthePATH="L:/html/jy1/"+theTIME+"/code";
//正则表达式,用于判断是否是一个网址
privatefinalstaticStringtheREGEX="(http|https)://[\\w+\\.?/?]+\\.[A-Za-z]+";
/**
*启动类
*@paramargs
*/
publicstaticvoidmain(String[]args){
found();
System.out.println("网站爬取完成");
}
publicstaticvoidfound(){
PrintWriterpw=null;
try{
//创建文件目录
FilefileDir=newFile(thePATH);
if(!fileDir.exists()){
fileDir.mkdirs();
}
//创建网站网页链接文件
pw=newPrintWriter(newFileWriter(theFILE),true);
//使用递归遍历网站的每个网页
spiderURL(theURL,pw);
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(pw!=null){
pw.close();
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
/**
*爬取该网页源码和网页内连接
*@paramurl该网页网址
*@paramtpw对网站网页网址文件连接的io流
*/
publicstaticvoidspiderURL(Stringurl,PrintWritertpw){
URLrealURL=null;
URLConnectionconnection=null;
BufferedReaderbr=null;
PrintWriterpw=null;
PrintWriterpw1=null;
Patternpattern=Pattern.compile(theREGEX);
try{
realURL=newURL(url);
connection=realURL.openConnection();
//生成文件夹
Stringsrc=thePATH+url.substring(theURL.length());
FilefileDir=newFile(src);
if(!fileDir.exists()){
fileDir.mkdirs();
}
//生成源代码文件
pw=newPrintWriter(newFileWriter(src+"/Test.txt"),true);
pw1=tpw;
//爬取网页文件
br=newBufferedReader(newInputStreamReader(connection.getInputStream()));
Stringline=null;
while((line=br.readLine())!=null){
//把爬取的源码写入文件
pw.println(line);
System.out.println("爬取网页"+url+"成功");
Matchermatcher=pattern.matcher(line);
//判断是否是一个网址
while(matcher.find()){
//判断网址是否以网站主网址为前缀,防止爬到其他网站,并判断是否和原先网址重复
if(matcher.group().startsWith(theURL)&&examine(matcher.group())){
//把爬取的网址写入文件
pw1.println(matcher.group());
spiderURL(matcher.group(),pw1);
}
}
System.out.println("网页"+url+"内链接爬取完成");
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(br!=null){
br.close();
}
if(pw!=null){
pw.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}
/**
*判断是否和以储存网址相同
*@paramstr需判断的网址
*@return是否重复
*/
publicstaticbooleanexamine(Stringstr){
BufferedReaderbr=null;
Stringstr1;
try{
br=newBufferedReader(newFileReader(theFILE));
////针对该网站无用网页的屏蔽
//if(str.startsWith("http://www.jyyishu.cn/artnews/")){
//returnfalse;
//}
//循环文件中每一行的网址,判断是否重复,重复则退出
while((str1=br.readLine())!=null){
if(str.equals(str1)){
returnfalse;
}
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(br!=null){
br.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
returntrue;
}
}
2.爬取后的数据
部分链接:
网页数据:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。