搜索引擎——网络爬虫

作者: snoweek | 来源:发表于2015-10-18 19:23 被阅读283次

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

    首先讲解网络爬虫部分。
    网络爬虫(又被称为网页蜘蛛,网络机器人,在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进行下载。

    相关文章

      网友评论

        本文标题:搜索引擎——网络爬虫

        本文链接:https://www.haomeiwen.com/subject/damacttx.html