用java写一个简单的爬虫示例
一、基础知识
关于xml、html基本的标签标签文本知识
二、问题描述
完成一个单线程的爬虫程序。对给定的网址可以提取出其中所有的A标签中的包含的网址(href属性);
并根据这些网址再获得更多的网址。
要求:
输入参数:网址,最大采集的网页数量。
输出:采集的网页文件
三、代码
import java.io.*; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.*; public class SingleThreadJsoup { private ArrayList<String> linksString; private int max; private int numberOfThread; //判断是否是String是不是一个链接,写的很简单,这里可以加逻辑 public void SingleThreadJsoup(int m,int t){ max = m; numberOfThread = t; } public Boolean isUrl(String href){ if(href.startsWith("http://")){ return true; }else return false; } //得到所有已知网页的href属性 public void getHrefOfAll(String href,int m) throws IOException{ linksString = new ArrayList<String>(); max = m; int counter = 0; linksString.add(href); while(linksString.size() < max){ getHrefOfA(linksString.get(counter++)); } System.out.println(linksString); } //得到已知单个网页内的全部href public void getHrefOfA(String href) throws IOException{ try{ Document doc = Jsoup.connect(href).get(); Elements links = doc.select("a[href]"); for(Element link :links){ if(linksString.size()<max){ String linkHref = link.attr("href"); if(isUrl(linkHref)&&!linksString.contains(linkHref)){ System.out.println(linkHref); linksString.add(linkHref); } }else{ System.out.println("满了"); return; } } }catch(IOException e){ System.out.println(e); } } //写入TXT文件 public boolean write(String path) { BufferedWriter output = null; try { File f = new File(path); if (f.exists()) { } else { System.out.println("文件不存在,正在创建"); if (f.createNewFile()) { System.out.println("文件创建成功"); } else { System.out.println("文件创建失败"); } } output = new BufferedWriter(new FileWriter(f)); for(String s : linksString){ output.write(s); } output.flush(); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } //用淘宝测试 public static void main(String[] args) throws IOException{ SingleThreadJsoup test = new SingleThreadJsoup(); test.getHrefOfAll("http://www.taobao.com/",1000); test.write("saveRul.txt"); } }
写的比较乱 ..缺点有很多,比如当max很大的时候,占用内存会很高,只能当作爬虫的一个简简单单的“hello world”...
四、相关知识
jsoup教程