Selenium爬取亚马逊商品:合并三个for循环为单循环,解决输出布尔值问题
问题根因
- Java 中
ArrayList的add()方法返回值为boolean类型,用于标识元素是否添加成功,你直接将add()操作放在打印语句中,自然输出的是true而非商品信息 - 你在单次循环中对商品名称列表执行了两次
add()操作,会导致名称列表出现重复数据 - 三个商品属性的列表下标无需单独定义j、k变量,只要保证三个列表的元素是一一对应的,用同一个下标变量即可
修改方案
将你原有的for循环代码替换为如下内容即可:
for(int i=0; i<ar1.size() && i<ar2.size() && i<ar3.size(); i++) { // 先提取对应商品的三个属性 String productName = ar1.get(i).getText(); String productPrice = ar2.get(i).getText(); String productLink = ar3.get(i).getAttribute("href"); // 存入列表 arr1.add(productName); arr2.add(productPrice); arr3.add(productLink); // 逐组打印当前商品的三个属性 System.out.println("商品名称:" + productName); System.out.println("商品价格:" + productPrice); System.out.println("商品链接:" + productLink); // 可加分隔线区分不同商品 System.out.println("------------------------"); }
额外注意
如果出现三个列表长度不一致导致部分商品未打印的情况,大概率是你使用的三个XPath定位规则覆盖的元素范围不一致,需要调整XPath保证每个商品对应的名称、价格、链接都能被正确定位,三个列表长度保持一致。
内容的提问来源于stack exchange,提问作者Pratik Pathare
相关产品推荐
相关产品推荐

