簡単なjavaはホームページのデータを登ります

17607 ワード

スタティツクウォーク
public class HttpUtil {
	
	    public static Document get(String url, String charset) throws IOException {
	        String userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) " +
	                "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36";
	        URL url2 = new URL(url);
	        HttpURLConnection connection = (HttpURLConnection) url2.openConnection();
	        connection.setRequestMethod("GET");
	        //       ,  true
	        connection.setUseCaches(Boolean.FALSE);
	        //        
	        connection.addRequestProperty("Connection", "close");
	        connection.addRequestProperty("user-agent", userAgent);
	        //         (  :  )
	        connection.setConnectTimeout(80000);
	        //            (  :  )
	        connection.setReadTimeout(80000);
	        //     
	        try {
	            Document doc = Jsoup.parse(connection.getInputStream(), charset, url);
	            return doc;
	        } catch (Exception e) {
	            System.out.println("parse error: " + url);
	            e.printStackTrace();
	        }
	        return null;
	    }
	}
 public  static  void testDoc(){
        String url = "www.baidu.com";
        Document doc = null;
        try {
            doc = HttpUtil.get(url , "utf-8");
            System.out.println("doc:" + doc);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

ダイナミックスキップ
静的なだけで目的のデータを取得できない場合があります.レンダリング後のページを取得する必要があります.1.ブラウザカーネルを内蔵することでjsレンダリング後のページを取得できます.このようなツールにはSelenium、HtmlUnit、PhantomJsがあります.PhantomJsは対応するブラウザカーネルをダウンロードしなければならないが、私のローカルとサーバのオペレーティングシステムが異なるため、PhantomJsは選択されていない.HtmlUnitはエラーが多すぎても2.cdb 4 j:ローカルchromeブラウザを呼び出すことは選択されていないが、サーバにはchromeエラーがない可能性がある.3.最後に対応する要求を直接読み出すことを選択してjsonデータを取得する.次にcdb 4 jの例を示す
		<dependency>
            <groupId>io.webfolder</groupId>
            <artifactId>cdp4j</artifactId>
            <version>2.2.1</version>
       </dependency>
 public static void cdp(String url ){
       ArrayList<String> command = new ArrayList<String>();
       //   google    
       command.add("--headless");
       Launcher launcher = new Launcher();
       try (SessionFactory factory = launcher.launch(command);
            Session session = factory.create()) {
           session.navigate(url);
           session.waitDocumentReady();
           String content = (String) session.getContent();
           Document doc = Jsoup.parse(content);
           Element dateElement = doc.getElementsByClass("post__description").get(0);
           System.out.println("text:" + dateElement.text());
           Element docElements = doc.getElementsByClass("post__body").get(0);
           int i = 5;
           Elements liElements = docElements.getElementsByTag("li");
           for (Element element : liElements) {
               if (i <= 0) break;
               Element el = element.select("a").first();
               String href = el != null ? el.attr("href") : "";
               href = pre + href;
               String title =  element.select("a").text();

               System.out.println(" href:" + href +" title:" + title);
               i--;
           }
         
           System.out.println("end");
       }