java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据
最近在学习java的爬虫技术,学的是黑马的视频资源,由于是几年前的视频啦,京东页面有些许变化,在此记录我遇到的问题,使用的爬虫技术是httpClient和jsoup,项目搭建使用的springboot+ jpa。
首先给出主页的代码:
@Componentpublic classItemTask {
@AutowiredprivateHttpUtils httpUtils;
@AutowiredprivateItemService itemService;public static final ObjectMapper MAPPER = newObjectMapper();//设置定时任务执行完成后,再间隔100秒执行一次
@Scheduled(fixedDelay = 1000 * 100)public void process() throwsException {//分析页面发现访问的地址,页码page从1开始,下一页page加2
String url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.his.0.0&wq=%E6%89%8B%E6%9C%BA&s=121&click=0&page=";//遍历执行,获取所有的数据
for (int i = 1; i < 10; i = i + 2) {//发起请求进行访问,获取页面数据,先访问第一页
String html = this.httpUtils.getHtml(url +i);//解析页面数据,保存数据到数据库中
this.parseHtml(html);
}
System.out.println("执行完成");
}//解析页面,并把数据保存到数据库中
private void parseHtml(String html) throwsException {//使用jsoup解析页面
Document document =Jsoup.parse(html);//获取商品数据
Elements spus = document.select("div#J_goodsList > ul > li");//遍历商品spu数据
for(Element spuEle : spus) {//获取商品spu
String attr = spuEle.attr("data-spu");long spu = Long.parseLong(attr.equals("")?"0":attr);//Long spu = Long.parseLong(spuEle.attr("data-spu"));//获取商品sku数据
Elements skus = spuEle.select("li.ps-item img");for(Element skuEle : skus) {//获取商品sku
Long sku = Long.parseLong(skuEle.attr("data-sku"));//判断商品是否被抓取过,可以根据sku判断
Item param = newItem();
param.setSku(sku);
List list = this.itemService.findAll(param);//判断是否查询到结果
if (list.size() > 0) {//如果有结果,表示商品已下载,进行下一次遍历
continue;
}//保存商品数据,声明商品对象
Item item = newItem();//商品spu
item.setSpu(spu);//商品sku
item.setSku(sku);//商品url地址
item.setUrl("https://item.jd.com/" + sku + ".html");//创建时间
item.setCreated(newDate());//修改时间
item.setUpdated(item.getCreated());//获取商品标题
String itemHtml = this.httpUtils.getHtml(item.getUrl());
String title= Jsoup.parse(itemHtml).select("div.sku-name").text();
item.setTitle(title);//获取商品价格
String priceUrl = "https://p.3.cn/prices/mgets?skuIds=J_"+sku;
String priceJson= this.httpUtils.getHtml(priceUrl);//解析json数据获取商品价格
double price = MAPPER.readTree(priceJson).get(0).get("p").asDouble();
item.setPrice(price);//获取图片地址
String pic = "https:" + skuEle.attr("data-lazy-img").replace("/n9/","/n1/");
System.out.println(pic);//下载图片
String picName = this.httpUtils.getImage(pic);
item.setPic(picName);//保存商品数据
this.itemService.save(item);
}
}
}
}
分享一下我学习中遇到的问题:
1.爬取数据为null,需要登录京东
看到这段代码应该就明白了吧,就是京东发现并非人为操作,需要登陆账号了。解决办法也很简单,只需要自己模拟浏览器登陆即可
在HttpUttils加上这段,两个方法中的HTTPGet对象都需要设置一下。
//设置请求头模拟浏览器
httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0");
2.java.lang.NumberFormatException: For input string: "",获取的spu为空串,加上一个前置空串判断即可
解决如下:
//获取商品spu
String attr = spuEle.attr("data-spu");//判断是否为空串
long spu = Long.parseLong(attr.equals("")?"0":attr);
以上两个bug是我学习遇到的,现已解决,爬取数据如下:
java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据相关推荐
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...
http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储
1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HBase等. 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有 ...
- 使用python的requests+bs4 实现京东的手机商品数据收集
学习python有一段时间了,今天写写对京东的手机商品数据收集,权当练手,留个档 环境 win10.python3.7.pycharm 一.分析接口 在京东搜索手机这一标签,获得搜索主页面的url为 ...
- java 爬虫 获取京东_Java爬虫爬取京东
需求分析 首先访问京东,搜索手机,分析页面,我们抓取以下商品数据: 商品图片.价格.标题.商品详情页 SPU和SKU 除了以上四个属性以外,我们发现上图中的苹果手机有四种产品,我们应该每一种都要抓取. ...
- java爬虫 京东_java爬虫webmagic 案例爬取动态(ajax+js) 网站京东售价格
爬取京东手机ID与名称 爬取京东手机ID与价格 组织json 为啥没合并在一起,原因:其中有个组织价格URL的过程 项目采用maven管理 工程pom.xml文件见下一个博文 package org. ...
- java爬虫框架哪个好_java爬虫框架的使用
原标题:java爬虫框架的使用 随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,但是自始至终,java语言一直是被使用范围最广的编程语言.今天,武汉中软国际主要给大家讲解的是java语言中的 ...
- java爬虫小说网项目_java爬虫之下载txt小说
最近迷上了天蚕土豆写的<大主宰>这本玄幻小说,无奈找不到下载链接.于是就萌生了自己爬取小说章节的想法,代码其实很简单,主要在于分析网页结构.正则匹配以及文件保存. 1. 分析网页结构 爬取 ...
- java爬虫获取div内容_Java爬虫-简单解析网页内容
获取百度新闻中所有的中国新闻的标题时间来源 1 获取网页2 public static String getContent(String str) throwsClientProtocolExcept ...
- java爬虫出发onclick事件_java爬虫(五)利用selenium 模拟点击获取动态页面的内容...
依赖的资源 1.ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接 http://npm.taobao.org/mirrors/chromedriver/ 2.Se ...
- java爬虫模拟post请求_java爬虫之使用HttpClient模拟浏览器发送请求方法详解
0. 摘要 0.1 添加依赖 org.apache.httpcomponents httpclient 4.5.2 0.2 代码 //1. 打开浏览器 创建httpclient对象 Closeable ...
最新文章
- 曲线图实现,可滚动曲线图,自定义数据
- python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值、可视化模型效能
- php 输出rtf,有没有办法在PHP中访问压缩RTF和输出RTF代码
- 简明python教程 --C++程序员的视角(七):异常
- SignalR系列教程:SignalR快速入门
- android ui自动化测试框架有哪些,自动化测试框架对比(UIAutomator、Appium、Robotium)...
- Vue中去掉表单对象上前后空格
- SAP Spartacus CMSFlexComponent
- mysql修改字段 新增字段
- 导致解码延时/丢帧的语法元素—H264
- filestream streamreader
- 树莓派c语言小车红外,基于树莓派的红外避障小车
- php的md5(),PHP中MD5函数效率
- 飞到半路被撞?不是小鸟不专心,而是太阳能太晃眼
- 计算机三级网络技术最全知识点总结九
- 计算机硬盘计入哪个会计科目,电脑加装固态硬盘如何做分录
- 如何利用SUM函数合并单元格求和
- 生活小常识日常生活小常识
- Intellij Idea创建maven项目,App.java代码编辑区没有run选项
- SLAM导航机器人零基础实战系列:(四)差分底盘设计——2.stm32主控软件设计