• java操作html格式数据


    近期在做数据抓取功能,抓取到的数据为html格式,需在后台进行转换后取值,为了避免使用字符串查找方式获取而使用Jsonp完美实现。

    1. 引入Jsonp:

    1 <dependency>
    2     <groupId>org.jsoup</groupId>
    3     <artifactId>jsoup</artifactId>
    4     <version>1.11.2</version>
    5 </dependency>

    2. 进行数据转换:

      2.1 select可以获取HTML标签,类型为Elements;

      2.2 child(int index) 可以根据坐标获取子标签;

      2.3 text()可以获取便签内容。

     1 // 解析返回数据
     2 try {
     3     Document doc = Jsoup.parse(result);
     4     // 获取响应内容指定区域标签
     5     Elements elements = doc.select(".BOC_main").select("tr");
     6     // 获取具体值
     7     text = elements.get(1).child(6).text();
     8 } catch(Exception e) {
     9     e.printStackTrace();
    10 }

    3. 抓取数据方法:

      其中,请求属性要根据实际情况修改。

    private static String getUrlInfo(String url, String methodType, String param){
        try {
            URL url = new URL(urls);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置连接超时时间
            conn.setConnectTimeout(60000);
            // 设置读取超时时间
            conn.setReadTimeout(60000);
                
            if("Get".equalsIgnoreCase(methodType)) {
                conn.setRequestMethod("GET");
            }else {
                conn.setRequestMethod("POST");
            }
                
            // 设置请求属性
            conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            conn.setRequestProperty("Connection", "keep-alive");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Host", "host");
                
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // 设置是否使用缓存
            conn.setUseCaches(false);
                
            if(StringUtil.isNotBlank(param)) {
                // 建立输入流,向指向的URL传入参数
                DataOutputStream dos=new DataOutputStream(conn.getOutputStream());
                dos.writeBytes(param);
                dos.flush();
                dos.close();
            }
                
            // 输出返回结果
            InputStream input = conn.getInputStream();
            int resLen =0;
            byte[] res = new byte[1024];
            StringBuilder sb=new StringBuilder();
            while((resLen=input.read(res))!=-1){
                sb.append(new String(res, 0, resLen));
            }
            return sb.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }    
  • 相关阅读:
    链家大数据多维分析引擎实践
    html 读取变量
    django 分配字典给前台模板
    django将数组传递给前台模板
    fetachone和fetchall
    django捕获url中的值
    django 控制页面跳转
    MySQL的前缀索引及Oracle的类似实现
    django url捕获
    django 页面调用方法
  • 原文地址:https://www.cnblogs.com/commissar-Xia/p/9300000.html
Copyright © 2020-2023  润新知