網頁數據抓取

1.常規解析htmlhtml

使用Jsoup包,配合開發者工具(F12)定位須要的數據路徑。git

 數據抓取每每流程相似,能夠提出類似流程,優化結構。github

2. selenium   實例參考https://my.oschina.net/dyhunter/blog/94090web

geckodriver安裝:參考http://blog.csdn.net/jinhe123/article/details/69946234,到官網上下載與系統相應的最新版本geckodriver:https://github.com/mozilla/geckodriver/releases瀏覽器

a. 安裝firefox。工具

b. F12打開開發者工具,定位到頁面元素,在查看器內右鍵->複製->xPath路徑,也能夠經過By.***查找。優化

public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver", "C:\\setup\\geckodriver.exe");
        // 建立一個 FireFox 的瀏覽器實例
        WebDriver driver = new FirefoxDriver();

        // 讓瀏覽器訪問
        driver.get("http://www.shfe.com.cn/bourseService/businessdata/summaryinquiry/index.html?paramid=currinstrumentprop");

        // 獲取 網頁的 title
        System.out.println("1 Page title is: " + driver.getTitle());

        // 點擊修改日期
        // 2013年
        WebElement ymd = driver.findElement(By.xpath("/html/body/div[1]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/select[1]/option[10]"));
        ymd.click();
        // 10月
        ymd = driver.findElement(By.xpath("/html/body/div[1]/div[3]/div[1]/div[2]/div[2]/div/div/div/div/select[2]/option[10]"));
        ymd.click();
        // 11日
        ymd = driver.findElement(By.xpath("/html/body/div[1]/div[3]/div[1]/div[2]/div[2]/div/div/table/tbody/tr[3]/td[3]/a"));
        ymd.click();

        // 經過 xpath找到 input 的 DOM
        // 結算參數
        WebElement ele = driver.findElement(By.xpath("//*[@id=\"settlement\"]"));
        ele.click();
        // //*[@id="addedtable"]
        // /html/body/div[1]/div[3]/div[2]/div[3]/table/tbody[1]/tr
        // /html/body/div[1]/div[3]/div[2]/div[3]/table/tbody[1]
        // /html/body/div[1]/div[3]/div[2]/div[3]/table/tbody[3]/tr
        // /html/body/div[1]/div[3]/div[2]/div[3]/table/tbody[26]
        // /html/body/div[1]/div[3]/div[2]/div[3]/table/tbody[4]/tr/td[1]
        WebElement table = driver.findElement(By.xpath("//*[@id=\"addedtable\"]"));
        int count = table.findElements(By.tagName("tbody")).size();
        for (int i = 2; i <= count; i++) {
            String path = "/html/body/div[1]/div[3]/div[2]/div[3]/table/tbody[" + i + "]/tr";
            WebElement tr = driver.findElement(By.xpath(path));
            if (tr == null) break;
            int size = tr.findElements(By.tagName("td")).size();
            for (int j = 1; j <= size; j++) {
                WebElement td = driver.findElement(By.xpath("/html/body/div[1]/div[3]/div[2]/div[3]/table/tbody[" + i + "]/tr/td[" + j + "]"));
                System.out.print(td.getText() + "  ");
            }
            System.out.println();
        }
        List<WebElement> es = driver.findElements(By.className("title"));
        for (WebElement webElement : es) {
            System.out.println(webElement.getText());
        }

        // 顯示搜索結果頁面的 title
        System.out.println("2 Page title is: " + driver.getTitle());

        // 關閉瀏覽器
        driver.quit();
    }

使用selenium有時候打開網頁慢的話,有時候會致使讀取數據報錯,能夠嘗試sleep等待一會,再讀取數據。ui

相關文章
相關標籤/搜索