>  기사  >  Java  >  Java에서 URL을 사용하여 웹 콘텐츠를 캡처하는 방법

Java에서 URL을 사용하여 웹 콘텐츠를 캡처하는 방법

高洛峰
高洛峰원래의
2017-03-12 09:51:181718검색

이 글에서는 Java에서 URL을 사용하여 웹 콘텐츠를 캡처하는 방법

할 일이 없고 git을 원격 위치에 배포하는 방법을 방금 배웠습니다. 서비스 서버는 할 일이 없어서 그냥 웹페이지 정보를 캡쳐하기 위한 작은 도구를 만들어 그 안에 있는 값 중 일부를 매개변수로 설정하면, 확장 성능이 더 좋을 수도 있습니다! 이것이 좋은 시작이 되어 String을 더 능숙하게 읽을 수 있기를 바랍니다. JAVA1.8이 문자열을 연결하기 위해 String을 사용한다는 점은 주목할 가치가 있습니다. String의 성능을 크게 최적화하는 StringBulider로 연결하고 싶은 문자열. 더 이상 고민할 필요 없이 내 XXX 코드를 보여주세요~

작동 효과:

Java에서 URL을 사용하여 웹 콘텐츠를 캡처하는 방법

먼저 바이두 백과사전을 열고 "배우"와 같은 용어를 검색한 다음 F12를 눌러 소스 코드를 확인하세요

Java에서 URL을 사용하여 웹 콘텐츠를 캡처하는 방법

그런 다음 원하는 태그를 잡고 Linked해시Map을 삽입하세요. 안에는 괜찮아요, 아주 간단하죠? 코드를 보세요 罗

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;

/**
 * Created by chunmiao on 17-3-10.
 */
public class ReadBaiduSearch {

    //储存返回结果
    private LinkedHashMap<String,String> mapOfBaike;


    //获取搜索信息
    public LinkedHashMap<String,String> getInfomationOfBaike(String infomationWords) throws IOException {
        mapOfBaike = getResult(infomationWords);
        return mapOfBaike;
    }

    //通过网络链接获取信息
    private static LinkedHashMap<String, String> getResult(String keywords) throws IOException {
        //搜索的url
        String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
        //搜索词条的节点
        String startNode = "<dl class=\"search-list\">";
        //词条的链接关键字
        String keyOfHref = "href=\"";
        //词条的标题关键字
        String keyOfTitle = "target=\"_blank\">";

        String endNode = "</dl>";

        boolean isNode = false;

        String title;

        String href;

        String rLine;

        LinkedHashMap<String,String> keyMap = new LinkedHashMap<String,String>();

        //开始网络请求
        URL url = new URL(keyUrl);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        //读取网页内容
        while ((rLine = bufferedReader.readLine()) != null){
            //判断目标节点是否出现
            if(rLine.contains(startNode)){
                isNode = true;
            }
            //若目标节点出现,则开始抓取数据
            if (isNode){
                //若目标结束节点出现,则结束读取,节省读取时间
                if (rLine.contains(endNode)) {
                    //关闭读取流
                    bufferedReader.close();
                    inputStreamReader.close();
                    break;
                }
                //若值为空则不读取
                if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
                    keyMap.put(title,href);
                }
            }
        }
        return keyMap;
    }

    //获取词条对应的url
    private static String getHref(String rLine,String keyOfHref){
        String baikeUrl = "http://baike.baidu.com";
        String result = "";
        if(rLine.contains(keyOfHref)){
            //获取url
            for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != &#39;\"&#39;);j ++){
                result += rLine.charAt(j);
            }
            //获取的url中可能不含baikeUrl,如果没有则在头部添加一个
            if(!result.contains(baikeUrl)){
                result = baikeUrl + result;
            }
        }
        return result;
    }

    //获取词条对应的名称
    private static String getName(String rLine,String keyOfTitle){
        String result = "";
        //获取标题内容
        if(rLine.contains(keyOfTitle)){
            result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
            //将标题中的内容含有的标签去掉
            result = result.replaceAll("<em>|</em>|</a>|<a>","");
        }
        return result;
    }

}

위 내용은 Java에서 URL을 사용하여 웹 콘텐츠를 캡처하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.