我正在尝试使用Jsoup进行富链接预览。
对于大多数网站,我只是使用标签元抓取标题/图像,但这并不适用于亚马逊的图像。
使用Jsoup提取这些图像的最佳方法是什么?我试过了
document.select(img#landingImage)
和
document.getElementById("landingImage")
img.attr("data-old-hires")
或
img.attr("src")
,但这些似乎并不适用于所有的亚马逊链接。
什么是最好的方法来获得任何亚马逊链接有一个适当的预览工作?
我第一次尝试复制/粘贴我的浏览器建议的选择器,一旦我导航到图像。根据你的例子,建议是#landingImage
或#imgBlkfront
。
这些选择器显然过于具体,不能反映亚马逊产品页面的总体布局。
经过更多的研究,我发现了以下结构:
<!-- ... -->
<div id="main-image-container">
<!-- ... -->
<img src="the url you are looking for">
<!-- ... -->
合适的图像选择器应该是这样的:
div#main-image-container img
但在某些情况下(例如:https://www.amazon.com/dp/1947215450),这会导致每个查询生成两个图像,其中第一个图像不是实际的产品图像,而是一个"Look inside";标签。
你可以编辑你的选择器:
div#main-image-container img:not(#sitbLogoImg)
或者简单地选择结果的最后一张图像。
最终结果:
// your amazon product page link
// String url = ...
Document doc = Jsoup.connect(url).get();
System.out.println(doc.select("div#main-image-container img").last().attr("src"));
编辑
有什么问题吗?到目前为止,你发布的每个链接都对我有用。具体来说,这段代码:
Document doc = Jsoup.connect("https://rads.stackoverflow.com/amzn/click/com/B0792QJ28Y").get();
System.out.println(doc.select("div#main-image-container img").last().attr("src"));
doc = Jsoup.connect("https://rads.stackoverflow.com/amzn/click/com/B0815XFSGK").get();
System.out.println(doc.select("div#main-image-container img").last().attr("src"));
doc = Jsoup.connect("https://rads.stackoverflow.com/amzn/click/com/1974725928").get();
System.out.println(doc.select("div#main-image-container img").last().attr("src"));
doc = Jsoup.connect("https://rads.stackoverflow.com/amzn/click/com/1947215450").get();
System.out.println(doc.select("div#main-image-container img").last().attr("src"));
doc = Jsoup.connect("https://rads.stackoverflow.com/amzn/click/com/B07RRRV5CT").get();
System.out.println(doc.select("div#main-image-container img").last().attr("src"));
输出:
https://images-na.ssl-images-amazon.com/images/I/81OjP3A5B-L.__AC_SX300_SY300_QL70_ML2_.jpg
https://images-na.ssl-images-amazon.com/images/I/61DYLoyNRWL.__AC_SY300_SX300_QL70_ML2_.jpg
https://images-na.ssl-images-amazon.com/images/I/51YyZr8Sf+S._SY344_BO1,204,203,200_.jpg
https://images-na.ssl-images-amazon.com/images/I/51OudKdwxDL._SX218_BO1,204,203,200_QL40_ML2_.jpg
https://images-na.ssl-images-amazon.com/images/I/81IqKdsFOvL.__AC_SX300_SY300_QL70_ML2_.jpg