最基本的网页爬虫(数据采集)

    经常看到一些交流网页爬虫的初学者来问有没有教程,什么是爬虫呢?(ps:不是爬虫类,记得最搞笑的是一个交流这个主题的群,有人进来发广告,广告的内容则是卖蜥蜴、变色龙之类的爬虫)。ok,言归正传,什么是网络爬虫呢?

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。(摘自百度百科,网络爬虫的词条)

    不管看不看得懂,反正我们已经知道网络爬虫就是一个程序,该程序的作用就是不断的去采集网页的源代码(如果不知道什么是源代码的,打开浏览器然后随便一个网页,然后右键源代码),所以在这里我觉得如果要去主动去写一个可以按照自己的需求任意采集自己要的数据的爬虫,有几个技能是不可避免的,HTML,http协议,代码能力,正则(虽然目前有很多现成的工具类似Jsoup,beautifulsoup等,正则其实才是最灵活高效的工具,所以建议一定要掌握)。

    由于本文的标题是最基本的网页爬虫,所以我也不讲太多深的东西,我们就从一个最简单,但是也基本具有采集功能的程序代码来解释这个。

   

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
 * Created with IntelliJ IDEA.
 * User: lsz
 * Date: 14-4-27
 * Time: 上午1:16
 *   最基本的网页爬虫
 */
public class BasicCrawl {
    static String startUrl = "http://www.baidu.com";
    static Queue taskQueue = new ConcurrentLinkedQueue();

    public static void main(String[] args) throws IOException {
        init();
    }

    /**
     * 初始化任务,需要把入口URL添加到任务队列中
     */
    private static void init() throws IOException {
        taskQueue.add(startUrl);
        startTasks();
    }

    /**
     * 开始任务,任务不断的从任务队列中拿到接下来需要采集的URL
     * @throws IOException
     */
    private static void startTasks() throws IOException {
        String url = null;
        while((url = taskQueue.poll())!=null){
            String content = Jsoup.connect(url).get().html();
            System.out.println("DownLoaded url:"+url);
            parse(content);
            System.out.println("parsed url:"+url);
        }
    }
    private static void parse(String htmlContent){
            Document doc = Jsoup.parse(htmlContent);
            //得到需要继续采集的URL,一般是写规则,我为了简单就直接获得所有的URL
            Elements allATag = doc.select("a");
            for(Element ele:allATag){
                taskQueue.add(ele.absUrl("href"));
            }
            //接下来是处理网页,我简单就是自己获得title输出
            String title = doc.title();
            System.out.println("The title is:"+title);
    }
}


    代码就在上面了,具体的也不多讲了,主要就是要有几个基本元素,比如开始的URL,然后任务队列,还有想办法如何不断的往队列加东西,让这个爬虫不要停下来。网页爬虫的开发有深有浅,看不同的人怎么看待了,这里我用的是jsoup库 ,简单易用。

    

你可能感兴趣的:(java,网络爬虫)