2016-08-11 29 views
1

これは、Excelの表形式でクロールされたデータを保存するためにExcelシートを作成しようとしている間に、データがURLからフェッチされ、このデータは `配列リストに格納されているデータを、Excelでjavaを使用して挿入する

import java.util.ArrayList; 

import com.webscrap4j.WebScrap; 
import com.webscrap4j.WebScrapException; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Scanner; 

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRichTextString; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.CreationHelper; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.ss.usermodel.WorkbookFactory; 
import org.apache.poi.xssf.usermodel.XSSFTable; 


public class crawl 
{ 
    public static void main(String[] args) throws IOException { 



     ArrayList<String> al = new ArrayList<String>(); 
     ArrayList<String> bl = new ArrayList<String>(); 
     ArrayList<String> cl = new ArrayList<String>(); 
     WebScrap ws = new WebScrap(); 

     ws.setUrl("https://www.pepperfry.com/hardware-electricals-power-storage-ups-inverters.html"); 
     try 


     { 

      ws.startWebScrap(); 
      //al = ws.getImageTagData("img", "title"); 
      al = ws.getSingleHTMLScriptData("<div class='card-body-title hidden-txt'>", "</div>"); 
      bl = ws.getSingleHTMLScriptData("<span class='strike'>", "</span>"); 
      cl = ws.getSingleHTMLScriptData("<p class='card-body-price txt-red'>", "</p>"); 




    /*  FileOutputStream fos=new FileOutputStream("/Users/parthpatil/Documents/11.xls"); 
      HSSFWorkbook workBook = new HSSFWorkbook(); 

      HSSFSheet Sheet = workBook.createSheet("products"); 
      //XSSFTable my_table = Sheet.createTable(); 
      HSSFRow row; 
      HSSFCell cell; 
      CreationHelper helper = workBook.getCreationHelper(); 


      Row header = Sheet.createRow(0); 
      header.createCell(0).setCellValue("Product Name"); 
      header.createCell(1).setCellValue("Product Price"); 
      header.createCell(2).setCellValue("Product MRP"); 



       for(int i=0;i<al.size();i++){ 
        row = Sheet.createRow((short) i); 
       cell = row.createCell(i); 
       System.out.println(al.get(i)); 
       cell.setCellValue(al.get(i).toString()); 
       } 
       System.out.println("Done"); 
       workBook.write(fos); 

       */ 

      for (String adata : al) 
      { 

       System.out.println("the product are:- " + adata); 

      } 
      for (String bdata : bl) 
      { 

       System.out.println("the MRp are:- " + bdata); 

      } 
      for (String cdata : cl) 
      { 

       System.out.println("the selling price is:- " + cdata); 

      } 

     } catch (WebScrapException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



} 


} 
+0

何動作しませんか? – elyashiv

+0

完了したらストリームを常に閉じます – Ephi

+0

このコードはコメント部分を残して動作しますが、ここではこのデータをExcelシートに保存しますが、配列リストのために問題が発生すると、フォーマットされたテーブルを使ってExcelを作成できますal、bl、cl ,?のデータを格納する3つの列があります。 –

答えて

2

配列リストに保存する必要があるあなたのコードグローバルここで、それが唯一のいくつかの小さなミスがあり訂正されたが、それはあなたのコードで行うことができる方法である:

// Use the try-with-resource statement to close all the resources properly 
try (HSSFWorkbook workBook = new HSSFWorkbook(); 
    FileOutputStream fos = new FileOutputStream("/Users/parthpatil/Documents/11.xls")) { 

    // Create the Sheet 
    HSSFSheet Sheet = workBook.createSheet("products"); 

    // Create the first row corresponding to the header 
    Row header = Sheet.createRow(0); 
    header.createCell(0).setCellValue("Product Name"); 
    header.createCell(1).setCellValue("Product Price"); 
    header.createCell(2).setCellValue("Product MRP"); 

    // Ensure that all the List have the same size otherwise throw an exception 
    if (al.size() != bl.size() || al.size() != cl.size()) 
     throw new IllegalStateException("Some data is missing"); 

    // Iterate over all the list an create the rows of data 
    for(int i = 0; i < al.size(); i++){ 
     // Create the current starting from 1 to al.size() 
     HSSFRow row = Sheet.createRow((short) i + 1); 
     // Cell of the Product Name 
     row.createCell(0).setCellValue(al.get(i)); 
     // Cell of the Product Price 
     row.createCell(1).setCellValue(cl.get(i)); 
     // Cell of the Product MRP 
     row.createCell(2).setCellValue(bl.get(i)); 
    } 
    // Write the result into the file 
    workBook.write(fos); 
} 
+0

ありがとうございます。何週間も詰まっていた問題を解決してくれてありがとうございます。そのクロールプログラムは、URLの他のページをフォローしていません。フェッチ項目はページ番号1から、すべてのページをフェッチする必要があります。このプログラムの再帰的ループ –

+0

問題の混在を避けてください。新しい質問を投稿してください。 –

関連する問題