Java 通过jsoup抓取Amazon时数据不整齐
我正在使用Java 通过jsoup抓取Amazon时数据不整齐,java,html,css,web-scraping,jsoup,Java,Html,Css,Web Scraping,Jsoup,我正在使用jsoup库来抓取amazon页面。我想获得特定关键字的asin列表,它们在UI中的顺序是正确的。 我使用此选择器获取列表,但根据数据索引,asin不符合顺序 Elements resultList = doc.select("#search div.s-result-list div[data-asin]"); int count = 0; for (Element currentProduct : re
jsoup
库来抓取amazon页面。我想获得特定关键字的asin
列表,它们在UI中的顺序是正确的。
我使用此选择器获取列表,但根据数据索引,asin
不符合顺序
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++;
}
输出:
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 B01GEW89P022
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 B01GEW89P061
59 B00R2BQKQ8 62
我将上述输出
与amazon页面上该选择器div.s-main-slot.s-result-list.s-search-results.sg行中的ASIN列表进行了比较。我将随机获得asin
,此列表中的一些asin不在UI中。我不知道为什么会这样。我也尝试了《木偶演员》
,但仍然得到了同样的结果。也尝试过代理,但仍然没有运气
然后,我尝试了另一种方法,我使用选择器
对单个asin
进行选择,并将它们放入数组列表
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);
但这样做的结果也完全出乎意料。我想得到这个结果列表的确切顺序,因为他们在每个关键字的用户界面。我的主要目标是为每个关键字只获取
前5名ASIN(产品)
。这可能与获取文档的方式有关?。您正在使用URL吗?请求。在这种情况下,硒将是一个更好的选择。硒是我对他说的。我完全不明白你的意思。您发布的数据排序几乎完美—您没有澄清缺失的内容,也没有显示无法检索的数据的查看源代码按钮的副本。数字被排序了,你真的看不出来吗?