vbgvbg 2020-02-02 18:43 采纳率: 100%
浏览 468
已采纳

抓取某软件数据请求及返回的数据格式

进入软件后点击最下面的行情,在新的页面中点击中间精选版块最右边的更多,要求提供新页面 精选,行业,概念,地区的数据请求(http://)及返回的数据格式,谢谢。
软件下载地址:https://www.kaipanla.com

  • 写回答

2条回答 默认 最新

  • dabocaiqq 2020-02-02 19:31
    关注
    public class GetStockList {
        // 起始页码
        private static final int page = 166;
        private static final String USER_AGENT = "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) "
                + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36";
        private static final String COOKIE = "_gat=1; nsfw-click-load=off; gif-click-load=on;"
                + " _ga=GA1.2.1861846600.1423061484";
    
        public static void main(String[] args) {
            // HttpClient 超时配置
            RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD)
                    .setConnectionRequestTimeout(6000).setConnectTimeout(6000).build();
            CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).build();
            String url = "http://www.yz21.org/stock/info/";
            String urlToReq = "";
            StockProxy dao = StockProxy.getInstance();
            try {
                for (int i = 1; i <= page; i++) {
                    // 创建一个GET请求
                    String strParams = "/stocklist_" + i + ".html";
                    if (i == 1) {
                        strParams = "";
                    }
                    urlToReq = url + strParams;
                    // 停留一秒后开始任务
                    Thread.sleep(1000);
                    // 发送请求,并执行
                    String htmlForStock = HttpHelper.getHtmlStrByUrl(urlToReq, httpClient, COOKIE, USER_AGENT);
                    if (!htmlForStock.contains("找不到文件或目录")) {
                        // 网页内容解析
                        System.out.println("该网页存在,正在解析:" + urlToReq);
                        Document doc = Jsoup.parse(htmlForStock);
                        // 获取table表的行集合元素
                        Elements trs = doc.getElementById("All_stocks1_DataGrid1").select("tr");
                        SharePo sharePo = new SharePo();
                        for (int j = 1; j < trs.size(); j++) {
                            Elements tds = trs.get(j).select("td");
                            sharePo = new SharePo();
                            Element link = tds.get(1).select("a").first();
                            String relHref = link.attr("href");
                            String strtype = "";
                            if (relHref.contains("sh")) {
                                strtype = "sh";
                            } else if (relHref.contains("sz")) {
                                strtype = "sz";
                            }
                            // 股票代码
                            sharePo.setSharecode(strtype + tds.get(1).text());
                            // 股票简称
                            sharePo.setSharename(tds.get(2).text());
                            // 公司名称
                            sharePo.setCompanyname(tds.get(3).text());
                            // 股票简称拼音
                            sharePo.setCompanyshort(tds.get(4).text());
                            dao.addShare(sharePo);
                        }
    
                    } else {
                        System.out.println("该网页不存在:" + urlToReq);
                        break;
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }
    
    
    public class HttpHelper {
    
        public static String getHtmlStrByUrl(String url, CloseableHttpClient httpClient, String COOKIE, String USER_AGENT) {
            HttpGet httpGetForFName = new HttpGet(url);
            httpGetForFName.addHeader("User-Agent", USER_AGENT);
            httpGetForFName.addHeader("Cookie", COOKIE);
            httpGetForFName.addHeader("Content-Type", "text/html;charset=UTF-8");
            // 发送请求,并执行
            CloseableHttpResponse response;
            String html = "";
            try {
                response = httpClient.execute(httpGetForFName);         
                InputStream in = response.getEntity().getContent();
                html = Utils.convertStreamToString(in);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return html;
        }
    
    }
    public class StreamUtils {
    
        public static String convertStreamToString(InputStream in) {
            StringBuilder sb = new StringBuilder();
            try {
    
                InputStreamReader isr = new InputStreamReader(in, "UTF-8");
                BufferedReader reader = new BufferedReader(isr);
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "/n");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return sb.toString();
    
        }
    }
    public class SharePo {
    
        private Long shareid;
        private String companyname;
        private String companyshort;
        private String sharecode;
        private String sharename;
        private Double todaybeginprice;
        private Double yesterdaycloseprice;
        private Double nowprice;
        private Double highprice;
        private Double lowprice;
        /**在此省略get/set方法**/
    
    }
    

    可以参考以上代码

    采纳后可以按照你的要求写一个

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!