Java实现网站爬取商品图片按(productId_序号)格式命名
解决方案
要实现「productId_序号」的命名格式,只需在循环外声明一个从1开始的计数器变量,每次循环使用当前计数器值作为序号,随后递增计数器即可。
修改后的代码如下:
// 初始化图片序号,从1开始 int imageIndex = 1; for(Element imageElement : imageElements){ String strImageURL = imageElement.attr("src"); // 使用当前序号,之后序号自增 String strImageName = product_id + "_" + imageIndex++; try { URL urlImage = new URL(strImageURL); InputStream in = urlImage.openStream(); byte[] buffer = new byte[4096]; int n = -1; OutputStream os = new FileOutputStream(IMAGE_DESTINATION_FOLDER + "/" + strImageName); while ((n = in.read(buffer)) != -1 ){ os.write(buffer, 0, n); } // 关闭流 os.close(); in.close(); // 别忘了关闭输入流 } catch (IOException e) { System.out.println("sponsored product"); // 可选:打印异常信息方便排查问题 // e.printStackTrace(); } }
补充优化建议
- 推荐使用try-with-resources语法自动管理流资源,避免手动关闭可能引发的资源泄漏:
int imageIndex = 1; for(Element imageElement : imageElements){ String strImageURL = imageElement.attr("src"); String strImageName = product_id + "_" + imageIndex++; try (InputStream in = new URL(strImageURL).openStream(); OutputStream os = new FileOutputStream(IMAGE_DESTINATION_FOLDER + "/" + strImageName)) { byte[] buffer = new byte[4096]; int n = -1; while ((n = in.read(buffer)) != -1 ){ os.write(buffer, 0, n); } } catch (IOException e) { System.out.println("sponsored product"); e.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者Can Hurioğlu
相关产品推荐
相关产品推荐

