java 如何获取京东商品实时价格

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后就跟换代理。

 

 

### Java编写爬虫脚本获取京东商品数据示例 #### 使用HttpClient发送HTTP请求并接收响应 为了实现网络通信,可以利用Apache HttpClient库来构建HTTP GET请求,并处理来自服务器的响应。 ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class JDProductCrawler { public static String fetchPageContent(String url) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); try { HttpGet request = new HttpGet(url); // 设置请求头信息模拟浏览器访问 request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); HttpResponse response = httpClient.execute(request); if (response.getStatusLine().getStatusCode() == 200) { return EntityUtils.toString(response.getEntity(), "UTF-8"); } else { throw new RuntimeException("Failed to get page content."); } } finally { httpClient.close(); } } } ``` 此部分展示了如何设置`HttpGet`实例以及执行实际的HTTP请求操作[^1]。 #### 利用Jsoup解析HTML文档提取所需信息 一旦获得了网页源码字符串形式的内容之后,则可借助于Jsoup来进行DOM树结构化表示,并从中抽取特定标签内的文本或其他属性值作为目标产品详情。 ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; // 继续上面的方法... Document doc = Jsoup.parse(fetchPageContent(url)); Elements items = doc.getElementsByClass("gl-item"); // 假设这是商品列表项所在的类名 for (Element item : items) { Element titleElem = item.select(".p-name em").first(); // 获取标题元素 System.out.println(titleElem.text()); // 输出商品名称 Element priceElem = item.select(".p-price i").first(); // 获取价格元素 System.out.println(priceElem.text()); // 输出商品价格 } ``` 上述代码片段说明了怎样运用Jsoup选取器语法定位到页面中的各个组件,并读取出它们内部的文字内容或数值型字段。 请注意,在真实环境中开发此类应用时还需要考虑更多因素比如异常处理机制、反爬策略应对措施等;另外也要遵循各网站的服务条款与法律法规限制条件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值