【发布时间】:2017-01-02 23:08:07
【问题描述】:
这个爬虫程序出现越界异常 如何解决?
线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引: 11,大小:11 在 java.util.ArrayList.rangeCheck(ArrayList.java:653) 在 java.util.ArrayList.get(ArrayList.java:429) 在 Glowship_inv_battery.main(Glowship_inv_battery.java:68)
代码:
import java.util.ArrayList;
import com.webscrap4j.WebScrap;
import com.webscrap4j.WebScrapException;
import java.io.FileOutputStream;
import java.io.IOException;
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.ss.usermodel.Row;
public class letsbuybattery_inverterbattery
{
@SuppressWarnings("resource")
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("http://letsbuybattery.com/inverters/");
try
{
ws.startWebScrap();
al = ws.getSingleHTMLScriptData("<h5>", "</h5>");
//mrp
bl = ws.getSingleHTMLScriptData("<div class='clearfix'> ", "</div>");
//selling price
cl = ws.getSingleHTMLScriptData("<div class='item-price pull-left'>", "</div>");
HSSFWorkbook workBook = new HSSFWorkbook();
FileOutputStream fos = new FileOutputStream("/Users/parthpatil/Documents/Abm Technologies/Crawl/letbuybattery_battery.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);
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) {
e.printStackTrace(System.out);
}
}
}
【问题讨论】:
-
你确定 al, bl 和 cl 大小一样????
-
你的 al, bl, cl 必须有不同的尺寸。调试你的代码,或者在循环之前打印尺寸。
-
原因是您正在访问索引从 0 到 10 的数组的第 11 个索引。
-
@balmy 你不应该在问题中修改人们的代码,请参阅meta.stackoverflow.com/q/260245/525036。我回滚了这个,但我看到你做的更多,所以我不会发起编辑战。
标签: java arraylist indexoutofboundsexception