使用HttpClient和Jsoup爬取京东商城关键字搜索的商品页面

使用HttpClient可以创建浏览器对象,然后对页面数据进行抓取,另外再使用Jsoup库解析Html页面。因为Jsoup和JQuery一样有选择器获取元素的方式,所以抓取页面数据变得非常方便。

例如这个链接:https://search.jd.com/Search?keyword=%E5%B0%8F%E7%B1%B3&page=1&s=201&click=0
研究发现,京东商城关键字搜索商品的页面Url的page参数为奇数(1、3、5、7、9...),估计应该是前面30个商品数据实际为第一页,后面Ajax加载的30个商品数据实际为第二页,这个第一页和第二页的数据合起来就是page的1页的数据。

另外,京东商品的数据中,有2个字段很神奇,分别为spu和sku,spu代表商品集合id,sku代表商品最小品类单元id,也就是说一个spu至少有一个或多个sku。每个sku代表一个商品。
例如这个链接:https://item.jd.com/100004994481.html

现在就以爬取京东某个关键词下面的商品列表,一页有60个商品,不过只能爬取30个,还有30个是通过Ajax加载的,而且需要页面滚动到第30个数据之后才执行的Ajax请求,所以目前这异步加载的30个商品数据就爬不了了。如果想要抓取完整的60条数据,可以使用Selenium库,它是以滚动页面方式分析和抓取网页数据,可以抓取Js动态生成数据。

使用Fiddler抓包工具,有几个小发现,如下所示。

使用HttpClient和Jsoup爬取京东商城关键字搜索的商品页面_第1张图片

这里奉上一个简单的学习Demo,基于SpringBoot+HttpClient+Jsoup框架,只能获取每页的前30条商品数据,后30条异步加载的商品数据暂时没去实现,仅用于学习。
效果如下:

使用HttpClient和Jsoup爬取京东商城关键字搜索的商品页面_第2张图片

你可能感兴趣的:(SpringBoot,Java)