额,随着小项目做的越来越多,技术啥的不见得涨多少,但是各种稀奇古怪的玩意儿肯定越接触越多。
本来一个好好的网站项目,突然被告知有一些要用到爬虫的东西。离交任务不到一周突然接到这个通知我简直???
不过一细问才知道并没有那么难,也是领导一知半解了吓唬我,其实就是根据某东的sku直接获取商品的主图和价格,商品名,商家名等信息。
这里简单说一下,京东中商品的sku就是编号,下面附个图解释:
红色框起来的编号就是sku
红色框起来的编号是sku
注意一下,哪怕是一家店铺,一个商品的多种不同选择,也是不同的sku。简单来说一个sku肯定对应唯一的一个商品和价格。
在app上看的不清楚,但是在网站上很容易能看出直接
"https://item.jd.com/"+skuId+".html"
上面的网址就可以打开某一个sku的详情页面。如下这几个都是可以直接打开的:
https://item.jd.com/31014227524.html
https://item.jd.com/32399509894.html
https://item.jd.com/31014227526.html
回到正题,今天的任务就是知道商品的sku同时获取商品的详细信息等。然后其实在没用jsoup之前,我也尝试用一种很无脑的方式实现了的。如下:
其实就是一个简单的http请求获取页面。然后根据页面的特性去模糊匹配。但是具体的查询方法比较low,而且遇到特殊的商品可能还查询出来的不对。可能再完善完善细节就实现了,但是我已经没耐心了。
到这才说到正题:jsoup解析器。
我感觉单纯的jsoup是和任何爬虫无关的,它本身只是一个html的解析器。提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出数据。
然后下面是使用方法:
- 导包
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
- 使用
其实看我上面的代码,就是自己写请求去获取页面,然后返回html页面,虽说代码不多但是也挺麻烦的,而jsoup支持直接从url中获取内容(深感后悔自己之前浪费好多时间),简单一句代码:
Document document = Jsoup.connect("https://item.jd.com/"+skuId+".html").get();
这一句话,document获取的就是这个url的html。等同于我上文中的result。然后下一步就是在这个document树上获取自己想获取的信息。
好的,我被现实痛击了!这个京东爬过来的源码中没有价格。。
脑壳痛,据多方研究讨论,这个价格应该是京东特意做成这样的,目的就是为了反爬。。但是除了价格别的都可以。比如商品标题,比如图片啥的。
经过和领导的争论,这里领导说可以不要价格了。然后剩下的就比较简单。我反正是用了很low的一种形式实现了。先附上实现代码。以后有改动了会跟着更改本文的:
public R getSku(String skuId) {
try {
Document document = Jsoup.connect("https://item.jd.com/"+skuId+".html").get();
Elements elements = document.getElementById("choose-attr-1").getElementsByClass("selected");
String string = elements.toString();
string = string.substring(string.indexOf("//")+2,string.indexOf(".jpg"))+".jpg";
String title = document.title();
return R.ok().put("img", string).put("title", title);
} catch (Exception e) {
return R.error("查询sku信息失败,详情请联系管理员!");
}
}
这篇笔记就到这里,如果稍微帮到你了记得点个喜欢点个关注,也祝大家工作顺顺利利!!另外java技术交流群130031711,群里好多学习资料啥的,欢迎各位萌新大佬踊跃加入!
网友评论