注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

使用Htmlparser|Jsoup|正则表达式抽取网页链接  

2013-08-01 17:15:38|  分类: 爬虫相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、使用正则表达式抽取网页链接:
解析抽取字符串中的链接:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class testRegularExp
{
public static void findURLs(String s){
String regex="<[aA]\\s.*?href=[\"\'\\s]*([^\"\'\\s]+)[\"\'\\s]*[^>]*>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(s);
while(mt.find()){
System.out.println("链接:"+mt.group(0));
System.out.println("链接地址:"+mt.group(1));
System.out.println("链接文字:"+mt.group(2));
}
}
    public static void main(String[] args)
    {
        
          String s="<a id=\"mvclicka\" href=\"http://show.g.mediav.com/c?type=2&oimpid=faydxTT_zAW4&pub=107_2401_1017993&cus=9_120917_1074366_10371404_0&fee=4gWeJG-UUUJR&pinfo=&ref=http://adsfile.qq.com/201306/28/shymmy_QHU_201306282933.html?tclick=http%3A%2F%2Fc.l.qq.com%2Flclick%3Fseq%3D20130628001246%26loc%3DQQ_HP_Upright%26aver%3D0%26soid%3D9E80D00A00C151FA0D9875535006&url=http://clicK.union.jd.com/JdClicK/?unionId=42054&siteId={source_id}&to=http://sale.jd.com/act/BhDZ6a8y3CSrR.html\" target=\"_blank\">Test</a>";
          findURLs(s);
    }
}
/*2.解析抽取html文件中的链接: */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class testRegularExp
{
public static void findURLs(String s){
String regex="<[aA]\\s.*?href=[\"\'\\s]*([^\"\'\\s]+)[\"\'\\s]*[^>]*>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(s);
String filename="D:\\parseResult.txt";
try{
FileWriter writer=new FileWriter(filename,true);
int count=0;
while(mt.find()){
if(mt.group(1).startsWith("http://")||mt.group(1).startsWith("https://")){
writer.write("链接:"+mt.group()+"\r\n");
writer.write("链接地址:"+mt.group(1)+"\r\n");
writer.write("链接文字:"+mt.group(2)+"\r\n");
count++;
}
}
writer.write("一共"+count+"个链接.");
writer.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
    public static void main(String[] args)
    {
 BufferedReader reader=null;
 StringBuffer buff=new StringBuffer();
 String html="";
     try{
    File input=new File("D://qq5.html");
    reader=new BufferedReader(new InputStreamReader(new FileInputStream(input),"UTF-8"));
    String oneLine=null;
    while((oneLine=reader.readLine())!=null){
    buff.append(oneLine+"\r\n");
    }
    reader.close();
     }catch(IOException e){
    e.printStackTrace();
     }finally{
    if(reader!=null){
    try{
    reader.close();
    }catch(IOException e){
    e.printStackTrace();
    }
    }
     }
     html=buff.toString();
     html.replaceAll("\"", "\\\"");
     findURLs(html);
 }

}

二、使用Htmlparser来抽取网页链接:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;
public class testHtmlParser{
private List<String> urlListWithJS=new ArrayList<String>();
private Set<String> urlSetWithJS=new HashSet<String>();
public void getHerf(String path,boolean isSupportJS) throws ParserException{
Parser parser=new Parser(path);
parser.setEncoding("GB2312");
HtmlPage page=new HtmlPage(parser);
parser.visitAllNodesWith(page);
NodeList nodelist=page.getBody();
NodeFilter filter=new TagNameFilter("A");
nodelist=nodelist.extractAllNodesThatMatch(filter,true);
int linkCount=0;
for(int i=0;i<nodelist.size();i++){
LinkTag link=(LinkTag)nodelist.elementAt(i);
if(link.getAttribute("href")!=null&&(link.getAttribute("href").contains("http://")||link.getAttribute("href").contains("https://"))){
linkCount++;
urlListWithJS.add(link.getAttribute("href"));
}
}

System.out.println("去重前该页面总共有:"+urlListWithJS.size()+"个链接.");
urlSetWithJS.addAll(urlListWithJS);
System.out.println("去重后该页面总共有:"+urlSetWithJS.size()+"个链接.");
Iterator it=urlSetWithJS.iterator();
while(it.hasNext()){
Object temp=it.next();
System.out.println(temp.toString());
}
}
public static void main(String[] arguments){
   String path="D://qq.html";
   String path2="D://qq5.html";
   testHtmlParser htmlParser=new testHtmlParser();
   try{
        htmlParser.getHerf(path2,true);
   }catch(ParserException e){
    e.printStackTrace();
   }
}
}

三、使用Jsoup来抽取网页链接:


import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * Example program to list links from a URL.
 */
public class testJSoup {
private static List<String> urlListWithJS=new ArrayList<String>();
private static Set<String> urlSetWithJS=new HashSet<String>();
    public static void main(String[] args) throws IOException {
        String path="D://qq.html";
        String path2="D://qq5.html";
        try{
      parserURL(path2,true);
        }catch(Exception e){
        e.printStackTrace();
        }
    }
    public static void parserURL(String path,boolean isSupportJS) throws Exception{
    File input=new File(path);
        Document doc=Jsoup.parse(input,"UTF-8");
        Elements links = doc.select("a");
        for (Element link : links) {
        System.out.println(link.toString());
urlListWithJS.add(link.attr("abs:href"));

      }
System.out.println("去重前该页面总共有:"+urlListWithJS.size()+"个链接.");
urlSetWithJS.addAll(urlListWithJS);
System.out.println("去重后该页面总共有:"+urlSetWithJS.size()+"个链接.");
Iterator it=urlSetWithJS.iterator();
while(it.hasNext()){
Object temp=it.next();
System.out.println(temp.toString());
}
    }
}



  评论这张
 
阅读(2293)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017