1. 程式人生 > >從網站上抓住相應資料至excel

從網站上抓住相應資料至excel

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;


import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;


public class Kiwi {


public static void main(String[] args) throws IOException,
RowsExceededException, WriteException {
// TODO Auto-generated method stub
System.setProperty("webdriver.firefox.bin",
"E:\\測試資料\\firefox 29\\firefox.exe");
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
String url = "https://list.tmall.com/search_product.htm?spm=875.7931836/B.subpannel2016049.73.10c849daXp8eDs&pos=1&cat=54448001&acm=201604133.1003.2.768874&scm=1003.2.201604133.OTHER_1459230500897_768874";
driver.get(url);
// driver.findElement(By.cssSelector("#login-info > a.sn-login")).click();
// driver.findElement(By.cssSelector("#J_Quick2Static")).click();
// driver.findElement(By.cssSelector("#TPL_username_1")).sendKeys(
// "13726285255");
// driver.findElement(By.cssSelector("#TPL_password_1")).sendKeys(
// "hlf862459");
// driver.findElement(By.cssSelector("#J_SubmitStatic")).click();


WritableWorkbook excel = Workbook.createWorkbook(new File("data.xls"));
WritableSheet sheet = excel.createSheet("奇異果", 0);
Label label;
label = new Label(0, 0, "價格");
sheet.addCell(label);
label = new Label(1, 0, "詳情");
sheet.addCell(label);
label = new Label(2, 0, "店鋪名稱");
sheet.addCell(label);
label = new Label(3, 0, "月成交量");
sheet.addCell(label);
label = new Label(4, 0, "評價數");
sheet.addCell(label);


WebElement pages = driver
.findElement(By
.cssSelector("#content > div > div.ui-page > div > b.ui-page-skip > form"));
System.out.println(pages.getText());// 得出共12頁
String pages_count = filter.filterNum(pages.getText());
System.out.println(pages_count);// 輸出總頁數
double count = Double.parseDouble(pages_count);
System.out.println("總共有" + count + "頁");
// (count-1)*60+p_amount
for (int j = 0; j < 12; j++) {
List<WebElement> elements = driver.findElements(By
.cssSelector("#J_ItemList > div"));// 把所有迴圈出來
// #J_ItemList
int p_amount = elements.size();// 60
System.out.println("本頁共有" + p_amount + "個");
List<WebElement> price = driver
.findElements(By
.cssSelector("#J_ItemList > div > div > p.productPrice > em"));
List<WebElement> detail = driver
.findElements(By
.cssSelector("#J_ItemList > div > div > p.productTitle > a"));
List<WebElement> shopName = driver
.findElements(By
.cssSelector("#J_ItemList > div > div > div.productShop > a"));
List<WebElement> OK_amount = driver
.findElements(By
.cssSelector("#J_ItemList > div > div > p.productStatus > span:nth-child(1)"));
List<WebElement> talk = driver
.findElements(By
.cssSelector("#J_ItemList > div > div > p.productStatus > span:nth-child(2) > a"));
if(j<11){
for (int i = 0; i < p_amount; i++) {
label = new Label(0, (i + 1) + (p_amount * j), price.get(i)
.getText());
sheet.addCell(label);
label = new Label(1, (i + 1) + (p_amount * j), detail
.get(i).getText());
sheet.addCell(label);
label = new Label(2, (i + 1) + (p_amount * j), shopName
.get(i).getText());
sheet.addCell(label);
String cjl = filter.filterNum(OK_amount.get(i).getText());
label = new Label(3, (i + 1) + (p_amount * j), cjl);
sheet.addCell(label);
label = new Label(4, (i + 1) + (p_amount * j), talk.get(i)
.getText());
sheet.addCell(label);
}
WebElement nextPage = driver.findElement(By
.cssSelector("#J_Filter > p > a.ui-page-s-next"));
System.out.println(nextPage.getText());
nextPage.click();
}
else{
for (int i = 0; i < p_amount; i++) {
label = new Label(0, 660+(i+1), price.get(i)
.getText());
sheet.addCell(label);
label = new Label(1, 660+(i+1), detail
.get(i).getText());
sheet.addCell(label);
label = new Label(2, 660+(i+1), shopName
.get(i).getText());
sheet.addCell(label);
String cjl = filter.filterNum(OK_amount.get(i).getText());
label = new Label(3, 660+(i+1), cjl);
sheet.addCell(label);
label = new Label(4, 660+(i+1), talk.get(i)
.getText());
sheet.addCell(label);
}

}

}
excel.write();
excel.close();
driver.quit();
}
}