搜索引擎——网络爬虫

最近写了一个简单的搜索引擎,将网易首页中的新闻扒下来进行整理,并能够进行搜索。
以下使用的开发环境是eclipse。
上工程结构图:

搜索引擎——网络爬虫_第1张图片

首先讲解网络爬虫部分。
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
在这里,用到了jsoup 。jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
jsoup开发手册 http://www.open-open.com/jsoup/
jsoup下载地址 http://jsoup.org/download
jsoup的jar包下载之后,导入我们的工程里就行了。
以下是获取首页中社会新闻的超链接以及插入数据库的代码。

import java.sql.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class getURL{
    public static void main(String[] args) {
        try{
        Document doc = Jsoup.connect("http://www.163.com").get();
        Elements link=doc.select("a[href^=http://news.163.com/15]");
        System.out.println("Links: "+link.size());
        for (Element links : link) {            
           String url=links.attr("href");
                 System.out.println( url);
                 Class.forName("com.mysql.jdbc.Driver");
                 Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/search?useUnicode=true&characterEncoding=utf-8","root","123456");
                 System.out.println(url);
                 PreparedStatement pstmt=conn.prepareStatement("insert into geturl(url)values(?)");
                 pstmt.setString(1,url);
                 pstmt.executeUpdate();    
        }
    }catch(Exception e){
        System.out.print("错误:"+e.getMessage());
    }
        

    }

}

程序运行结果如下

Links: 69
http://news.163.com/15/1018/10/B6714LQS00011229.html#f=resyswwwrank
http://news.163.com/15/1018/10/B6714LQS00011229.html#f=resyswwwrank
http://news.163.com/15/1018/01/B663HA6D00014Q4P.html#f=resyswwwrank
http://news.163.com/15/1018/01/B663HA6D00014Q4P.html#f=resyswwwrank
http://news.163.com/15/1018/00/B65VL94N00014AED.html#f=resyswwwrank
http://news.163.com/15/1018/00/B65VL94N00014AED.html#f=resyswwwrank
http://news.163.com/15/1018/09/B66S1BLF00011229.html#f=resyswwwrank
http://news.163.com/15/1018/09/B66S1BLF00011229.html#f=resyswwwrank
http://news.163.com/15/1018/11/B674F41400011229.html#f=resyswwwrank

获取了链接地址后,就开始到网页中扒取具体的新闻标题和内容了,并且要插入数据库。

import java.sql.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class getArtical {
    public static void main(String[] args) {
        Connection conn= null;
        PreparedStatement pstmt = null;
        ResultSet rs=null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/search?useUnicode=true&characterEncoding=utf-8","root","123456");
            pstmt=conn.prepareStatement("select url from geturl ");
            rs=pstmt.executeQuery();
            while(rs.next()){
                Document doc = Jsoup.connect(rs.getString("url")).get();
                Elements head=doc.select("h1");
                Elements pageContent=doc.select("p");
                String title=head.text();
                String content=pageContent.text();
                System.out.println(title);
                pstmt=conn.prepareStatement("insert into artical(title,content,url)values(?,?,?)");
                pstmt.setString(1,title);
                pstmt.setString(2,content);
                pstmt.setString(3,rs.getString("url"));
                pstmt.executeUpdate();
            }
        }catch(Exception e){
            System.out.print("错误:"+e.getMessage());
        }


    }

}

运行结果如下

广州晒天价采购预算:U盘千元 办公室1平米140万
男子说"他妈的"被起诉 法官引鲁迅文章判其无罪
媒体揭少林师徒反目史:亿元武校背后的权钱博弈

"海天盛筵"女主角涉卖淫被抓 曾被曝3天赚60万
海天盛筵外围女涉嫌组织卖淫被抓 名企老总涉案
昆明航空多名空姐被恶搞塞进行李架(图)

以上两段程序的运行结果,行数还有很多,为了节省篇幅,我只截取了其中的一部分。这是因为,扒取网页内容的输出,只是为了更方便的知道我们扒取网页成功了。
但不论是否输出,对于搜索引擎的后续工作是没有影响的。
那么,现在网页内容已经扒取完毕,接下来该做什么呢?请见后续文章,[搜索引擎——http://www.jianshu.com/p/3e84e02626fd

此项目的完整代码可以到我的github,search-engine进行下载。

你可能感兴趣的:(搜索引擎——网络爬虫)