Hadoop之仿写搜索引擎

这篇文章,可能比较长,如果你觉得写得好可以把它看完,希望对你有所帮助。
写搜索引擎先整理下思路大致分为三步:
从网上爬取数据,对拿到的数据进行整理即分词,然后通过关键字匹配拿到数据。我会详细介绍这三步。
先讲讲我要实现的效果,从网上拿到标题包括对应的地址,对标题进行分词,通过输入的关键字匹配分词,返回对应的网址。

一,爬取数据:
开始的时候对网站进行的一个垂直爬取,拿到它的个标题,A标签,后面发现在处理数据的时候,速度太慢了,就简化了操作,只对单个页面进行爬取。
1,爬取用到的包:
这里写图片描述

2,通过模拟浏览器,去访问网站,如果返回的code为200,说明访问成功,就可以将这个网页的数据进行下载。
3,拿到爬取后的数据,即将网页转化成一个String的形式,存下来了。然后通过正则表达式,选取我们所需要的标签,这里取的是a标签,这里会对A标签进行过滤和分组,只取到有连接的,在写正则时写多个分组,有利于后面拿到,标题,跟对应的地址。
4,拿到标题跟地址后,将地址中的“/”等进行替换,因为后面要将地址作为文件的名字,标题作为内容存到hdfs中。
爬取代码展示:
下载页面代码:

    import java.io.BufferedInputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Scanner;
    public class DownLoadTool {
        //下载页面内容
        public String downLoadUrl(String addr){
            StringBuffer sb=new StringBuffer();
            try {
                URL url=new URL(addr);
                HttpURLConnection con= (HttpURLConnection) url.openConnection();
                con.setConnectTimeout(5000);
                con.connect();
                if(con.getResponseCode()==200){
                    BufferedInputStream bis=new BufferedInputStream(con.getInputStream());
                    Scanner sc=new Scanner(bis,"GBK");
                    while(sc.hasNextLine()){
                        sb.append(sc.nextLine());
                    }
                }
            } catch (Exception e) {

                e.printStackTrace();
            } 
            return sb.toString();
        }
    }

正则表达式匹配代码:

import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//标题下载类
public class TiltelDownLoad {
    //取出图片的html标记<a[^>]*? href=[""'](?<url>[^""']*?)[""'][^>]*?>(?<text>[\w\W]*?)</a>
    //<\\s*a\\s+([^>]*)\\s*></a> 
    //<\\s*a\\s+([^>]*)\\s*>([^>]*)</a>";
    //<\\s*a\\s+([^>]*)\\s*>([^>]*)</a>
    //<\\s*a\\s+href\\s*=\\s*\"?http://(.*?)(\"|>|\\s+)([^>]*)\\s*>([^>]*)</a>
    static  String a_url="<\\s*a\\s+href\\s*=\\s*\"?http://(.*?)(\"|>|\\s+)([^>]*)\\s*>(.+?)</a>";
    //取出图片中的src内容
    static String href_url="href\\s*=\\s*\"?(.*?)(\"|>|\\s+)";
    //取出图片中的alt内容
    static String alt_url="alt\\s*=\\s*\"?(.*?)(\"|>|\\s+)";

    //取出图片的标签
    public Set<String> getTilteLink(String html){
        Set<String> result=new HashSet<String&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值