通过jsoup刮取Amazon时数据不整齐

问题描述

https://www.amazon.com/s?k=bond+nato+strap&crid=3BXLF6SLBX2MN&sprefix=bond+NATO+s%2Caps%2C683&ref=nb_sb_ss_i_1_10

我正在使用jsoup库抓取亚马逊页面。我想按正确的顺序获取asins的列表,就像它们在UI中一样。 我正在使用此选择器获取列表,但根据数据索引asins的顺序不正确。

          Elements resultList = doc.select("#search div.s-result-list div[data-asin]");
          int count = 0;
          for (Element currentProduct : resultList) {
                String asin = currentProduct.attr("data-asin");
                String index = currentProduct.attr("data-index");
                if(asin.isEmpty())
                    {
                        continue;
                    }
            
                System.out.println(count + " " + asin + " " + index);
                count++;                   
          }

link to the amazon page source

Output:

0 B07CZQGHL9 2
1 B015ESNT32 3
2 B07CZQGHL9 4
3 B015ESNT32 5
4 B07L748RJ2 6
5 B07F4297P9 8
6 B07G9W3B8K 9
7 B019CXDZAM 10
8 B07FWFMX6X 11
9 B01BAUVL0Q 12
10 B01HQTOX50 13
11 B07MQJXR5D 14
12 B0838JZ8KY 15
13 B071K7J6DW 16
14 B071FZ2Q2Z 17
15 B01KD8JCBG 18
16 B01E62WQTK 19
17 B077TF88BS 20
18 B0714LW3ZP 21
19 B01GEW89P0 22
20 B01AF7FA6Q 23
21 B074ZVJTS7 24
22 B07F3Z9DL7 25
23 B073QGQCNV 26
24 B073XC1F76 27
25 B07ZQTY2H9 28
26 B07V9K7DDZ 29
27 B073XCZPDQ 30
28 B06Y1MQC9Z 31
29 B0773X2XJT 32
30 B07G9W3B8K 33
31 B01AF7FA6Q 34
32 B00R2BQFBS 35
33 B07VP6YCK9 36
34 B07PJL2MXN 37
35 B07GJZ1MTP 38
36 B07D3GNKM6 39
37 B01LZFKeto 40
38 B07F42P9VC 41
39 B07RY3VNMD 42
40 B077Y9NVZJ 43
41 B073XF8JV5 44
42 B071ZNHV82 45
43 B07T7DJTWN 46
44 B073XC7QYY 47
45 B081B7HCP4 48
46 B01KD8J7OI 49
47 B077M7LDNT 50
48 B00N65QE8I 51
49 B00EF1kodi 52
50 B00N65R900 53
51 B07QX5X3Q2 54
52 B07NS7ZDD5 55
53 B006R2N3FE 56
54 B01MUA2CX6 57
55 B00N65RRMU 58
56 B07DJ7QLQ6 59
57 B0756B75MK 60
58 B01GEW89P0 61
59 B00R2BQKQ8 62

我将上述output与亚马逊页面上此选择器div.s-main-slot.s-result-list.s-search-results.sg-row内的asins列表进行了比较。我正在以随机顺序获得asins,并且此列表中的某些asins不在UI中。我不知道为什么会这样。我也使用puppeteer进行了尝试,但仍然得到了相同的结果。也尝试过代理,但仍然没有运气。

然后,我尝试了另一种方法,将selectors用于单个asins,并将它们放在arraylist中。

    Elements ist = doc.select("#search > div.s-desktop-width-max.s-desktop-content.sg-row > div.sg-col-20-of-24.sg-col-28-of-32.sg-col-16-of-20.sg-col.sg-col-32-of-36.sg-col-8-of-12.sg-col-12-of-16.sg-col-24-of-28 > div > span:nth-child(4) > div.s-main-slot.s-result-list.s-search-results.sg-row > div:nth-child(3)");
      String asin = ist.attr("data-asin");
      String index = ist.attr("data-index");
      System.out.println("ist: " + asin +" index: " + index);

但是这样的结果也是完全出乎意料的。我想按照每个关键字在UI中的确切顺序获取此结果列表。我的主要目标是每个关键字仅获得top 5 asins(products)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)