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