Maison  >  Article  >  Java  >  Comment utiliser l'URL en Java pour capturer du contenu Web

Comment utiliser l'URL en Java pour capturer du contenu Web

高洛峰
高洛峰original
2017-03-12 09:51:181705parcourir

Cet article présente comment utiliser l'url en Java pour capturer du contenu Web

Je n'ai rien à faire, je viens d'apprendre à déployer git sur un endroit distant Le serveur de service n'a rien à faire, j'ai donc simplement créé un petit outil pour capturer les informations de la page Web Si certaines des valeurs qu'il contient sont définies comme paramètres, le les performances d'expansion peuvent être meilleures ! J'espère que c'est un bon début et qu'il me permettra de mieux lire String. Il convient de noter que JAVA1.8 utilise String pour épisser les chaînes When , il traitera automatiquement le. chaîne que vous souhaitez épisser avec StringBulider, ce qui optimise considérablement les performances de String. Sans plus tarder, montrez mon code XXX~

Effet opérationnel :

Comment utiliser lURL en Java pour capturer du contenu Web

Ouvrez d'abord l'Encyclopédie Baidu, recherchez termes, tels que "acteur", puis appuyez sur F12 pour afficher le code source

Comment utiliser lURL en Java pour capturer du contenu Web

Ensuite, récupérez le tag que vous souhaitez et injectez LinkedHashMap C'est ok à l'intérieur, c'est très simple, non ? Jetez un œil au code

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;
    }

}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn