我知道这是一个已被多次询问过的错误,但我无法找到问题所在。错误显示如下:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 393, Size: 393
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at scraping.complementos_juegos.main(complementos_juegos.java:305)
我有很多不明白的事情。第一行显示Index: 393, Size: 393
,这意味着什么?数组的索引和大小?
我们来看看代码:
1.-我废弃超过2.700个链接,这些链接保存在名为all_links
的数组中。由于我想存储大量信息,因此我使用名为listaEmpresaA
的双维ArrayList:
ArrayList<ArrayList<String>> listaEmpresaA = new ArrayList<ArrayList<String>>();
String [] paises = {"USA"};
int total_columnas = 2 + (paises.length*3);
//CREATING THE COLUMS
for(int i =0; i< total_columnas; i++){
listaEmpresaA.add(new ArrayList<String>());
}
//DEFINITION OF THE ROWS
//<--------------- START OF THE HEADER DEFINITION
listaEmpresaA.get(0).add("Juego");
listaEmpresaA.get(1).add("URL");
for (z=0 ; z<paises.length; z++) {
for (int j=2; j<total_columnas ; j=j+3 ) {
listaEmpresaA.get(j).add(paises[z]);
listaEmpresaA.get(j+1).add(paises[z] + " Gold");
listaEmpresaA.get(j+2).add(paises[z] + " sin Gold");
}
}
int filas = 1; //JUST TO KNOW THE AMOUNT OF ROWS I HAVE
//<--------------- FINISH OF THE HEADER DEFINITION
//<--------------- STARTING OF THE SCRAPING FOR EACH LINK
int contador_juegos = 1;
for (String link : all_links) {
String urlPage = "https://www.microsoft.com" + link;
System.out.println(contador_juegos + ".- Comprobando entradas de: "+urlPage);
if (getStatusConnectionCode(urlPage) == 200) {
Document document = getHtmlDocument(urlPage);
Elements entradas = document.select("div.page-header div.m-product-detail-hero-product-placement div.context-product-placement-data");
for (Element elem : entradas) {
String titulo = elem.getElementsByClass("c-heading-2").text();
System.out.println(titulo+"\n");
listaEmpresaA.get(0).add(titulo);
listaEmpresaA.get(1).add(urlPage);
}
entradas = document.select("div.price-info");
for (Element elem : entradas) {
String titulo = elem.getElementsByTag("s").text();
System.out.println("Precio base: " + titulo+"\n");
listaEmpresaA.get(2).add(titulo);
}
entradas = document.select("div.price-info");
for (Element elem : entradas) {
String titulo = elem.getElementsByClass("price-disclaimer").text();
System.out.println("Precio para los miembros sin GOLD: " + titulo+"\n");
listaEmpresaA.get(3).add(titulo);
}
entradas = document.select("dd.cli_upsell-options div.cli_upsell-option");
// Paseo cada una de las entradas
for (Element elem : entradas) {
String titulo = elem.getElementsByClass("price-disclaimer").text();
System.out.println("Precio para los miembros GOLD: " + titulo+"\n");
listaEmpresaA.get(4).add(titulo);
}
filas++;
}
contador_juegos++;
}
//<--------------- FINISH OF THE SCRAPING FOR EACH LINK BAZAR USA
2.- 创建Excel 并将listaEmpresaA
arrayList中的信息存储到Excel中。
try {
//create .xls and create a worksheet.
FileOutputStream fos = new FileOutputStream("D:\\mierda.xls");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet worksheet = workbook.createSheet("XboxOne");
int l=0;
//CREATING EXCEL ROWS
for (int f=0; f< filas ; f++) {
HSSFRow fila = worksheet.createRow(f);
//CREATING EXCEL COLUMNS
for(int c=0;c<total_columnas;c++){
HSSFCell celda = fila.createCell(c);
celda.setCellValue(listaEmpresaA.get(c).get(f)); //<----- THIS IS THE LINE 305 WHERE I HAVE THE ERROR
l++;
}
}
//Save the workbook in .xls file
workbook.write(fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我有很多问题,如果你能给我一些提示,我会非常感激,这样我才能找到解决方案:
1.-我不明白为什么在程序运行到此时Index: 393, Size: 393
显示问题,直到总链接的索引2730(总共2.751个链接)。控制台上显示的最后一个数据是:
2730.- Comprobando entradas de:https://www.microsoft.com/en-us/store/p/star-wars-pinball-season-1-bundle/brz3mqfjnlmw 星球大战™弹球第1季捆绑
Precio base:
Precio para los miembros sin GOLD:
线程“main”中的异常java.lang.IndexOutOfBoundsException:索引:393,大小:393 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.get(ArrayList.java:429) 在scraping.complementos_juegos.main(complementos_juegos.java:305)
2.-当我使用for-each bucle时,我意识到它并没有完全按照数组上的顺序设置。我不知道为什么。
3.-该计划花费1小时仅仅是为了从一家商店中删除信息,我希望存储超过50个,¿有没有办法减少这个时间?我读过一些关于“HashMap”的内容,但我不知道如何使用它们。无论如何,如果这是一个更好的解决方案,我会看看。
提前致谢!
祝你有个美好的一天。