1、直接调用京东接口
https://p.3.cn/prices/mgets?pin=null&skuIds=4360445&area=1
https://p.3.cn/prices/mgets?skuIds=4360445
多个sku用英文,隔开(https://p.3.cn/prices/mgets?skuIds=4360445,100008125693)。
带area参数和不带area参数价格居然不一样,你品、你细品。
这样就可以直接获取京东的未登录的价格了,但是登录后发现部分商品又有优惠券或者满减或者打折,这时候价格又不准确了,不是用户最终购买时候的价格。这时候就得看第二种方法了。
2、用爬虫爬取京东页面,获取到价格和满减打折后进行计算
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> </dependency>
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> </dependency>
2.1加载驱动
public WebDriver getDriver(){ if(null==driver){ System.setProperty("webdriver.chrome.driver", "chromedriver"); ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("--disable-gpu"); driver = new ChromeDriver(options); driver.manage().timeouts().pageLoadTimeout(3, TimeUnit.SECONDS); } return driver; }
2.2 爬取页面
String sku="4360445";
String parsePath = "https://item.jd.com/%s.html"; try { getDriver().get(String.format(parsePath, sku)); }catch (Exception e){ } Document pageHtml = Jsoup.parse(getDriver().getPageSource()); String commentCount = pageHtml.getElementsByClass("J-comm-" + sku).first().text(); Element priceElement = pageHtml.getElementsByClass("J-p-" + sku).first();
此时priceElement就为京东页面上的价格
同理:
pageHtml.getElementsByClass("J-open-tb").first();
pageHtml.getElementsByClass("prom-item");
使用上面方法获取优惠券的数量,然后根据规格进行计算,在此就不提供详细方法了。需要的可以找我交流。
注意,京东会有反爬虫检查,一个ip爬取20个sku左右后就会报错,这时候就需要换ip了,需要使用代理,需要寻找免费的代理或者自己掏钱买,然后在代码中没过10s就跟换一个动态代理或者爬取20个sku后就跟换代理。