爬蟲二式 —— WebClient
阿新 • • 發佈:2018-12-29
優點:可設定一個執行JavaScript的時間,解決頁面資料延時載入問題
缺點:慢,而且引數不好設定
// 爬取網站網址+關鍵字(關鍵字需轉換為gbk的url,如"%2B%3E") String url = "http://s.zhaobiao.cn/search.do?queryword=" + URLEncoder.encode(name, "GBK"); // 查詢引數 Map<String, String> parameMap = new HashMap<>(); // 查詢關鍵字(上方已設定) // parameMap.put("queryword", URLEncoder.encode(name, "GBK")); // 省份 parameMap.put("province", ""); // 查詢型別:招標 parameMap.put("searchtype", "zb"); // 投標檔案 parameMap.put("bidfile", ""); // 推薦 parameMap.put("recommend", ""); // parameMap.put("leftday", ""); // 查詢年份 parameMap.put("searchyear", ""); // 全文搜尋 parameMap.put("field", "all"); // 展示方式為標題(title) 附概要(abstract) parameMap.put("displayStyle", "title"); // 是否搜尋附件 0.不搜尋 1.搜尋 parameMap.put("attachment", "1"); // 查詢歷史開始時間 parameMap.put("starttime", startTime); // 查詢歷史結束時間 parameMap.put("endtime", endTime); for (Entry<String, String> en : parameMap.entrySet()) { url += "&" + en.getKey() + "=" + en.getValue(); } // 構造一個webClient 模擬Chrome 瀏覽器 WebClient webClient = new WebClient(BrowserVersion.CHROME); // 支援JavaScript webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setCssEnabled(false); webClient.getOptions().setActiveXNative(false); webClient.getOptions().setCssEnabled(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setTimeout(5000); // 設定一個執行JavaScript的時間,解決頁面資料延時載入問題 webClient.waitForBackgroundJavaScript(5000); HtmlPage rootPage; try { rootPage = webClient.getPage(url); //如果執行的太快導致頁面請求異常,請設定等待時間 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block LOGGER.error("執行緒休眠1秒鐘出現異常!", e); e.printStackTrace(); } String html = rootPage.asXml(); Document doc = Jsoup.parse(html); // 解析 Element limit = doc.body().selectFirst("div[class=html]");