最近在学习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爬虫练习|爬取京东上的手机商品数据相关推荐

  1. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  2. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HBase等. 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有 ...

  3. 使用python的requests+bs4 实现京东的手机商品数据收集

    学习python有一段时间了,今天写写对京东的手机商品数据收集,权当练手,留个档 环境 win10.python3.7.pycharm 一.分析接口 在京东搜索手机这一标签,获得搜索主页面的url为 ...

  4. java 爬虫 获取京东_Java爬虫爬取京东

    需求分析 首先访问京东,搜索手机,分析页面,我们抓取以下商品数据: 商品图片.价格.标题.商品详情页 SPU和SKU 除了以上四个属性以外,我们发现上图中的苹果手机有四种产品,我们应该每一种都要抓取. ...

  5. java爬虫 京东_java爬虫webmagic 案例爬取动态(ajax+js) 网站京东售价格

    爬取京东手机ID与名称 爬取京东手机ID与价格 组织json 为啥没合并在一起,原因:其中有个组织价格URL的过程 项目采用maven管理 工程pom.xml文件见下一个博文 package org. ...

  6. java爬虫框架哪个好_java爬虫框架的使用

    原标题:java爬虫框架的使用 随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,但是自始至终,java语言一直是被使用范围最广的编程语言.今天,武汉中软国际主要给大家讲解的是java语言中的 ...

  7. java爬虫小说网项目_java爬虫之下载txt小说

    最近迷上了天蚕土豆写的<大主宰>这本玄幻小说,无奈找不到下载链接.于是就萌生了自己爬取小说章节的想法,代码其实很简单,主要在于分析网页结构.正则匹配以及文件保存. 1. 分析网页结构 爬取 ...

  8. java爬虫获取div内容_Java爬虫-简单解析网页内容

    获取百度新闻中所有的中国新闻的标题时间来源 1 获取网页2 public static String getContent(String str) throwsClientProtocolExcept ...

  9. java爬虫出发onclick事件_java爬虫(五)利用selenium 模拟点击获取动态页面的内容...

    依赖的资源 1.ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接 http://npm.taobao.org/mirrors/chromedriver/ 2.Se ...

  10. java爬虫模拟post请求_java爬虫之使用HttpClient模拟浏览器发送请求方法详解

    0. 摘要 0.1 添加依赖 org.apache.httpcomponents httpclient 4.5.2 0.2 代码 //1. 打开浏览器 创建httpclient对象 Closeable ...

最新文章

  1. 曲线图实现,可滚动曲线图,自定义数据
  2. python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值、可视化模型效能
  3. php 输出rtf,有没有办法在PHP中访问压缩RTF和输出RTF代码
  4. 简明python教程 --C++程序员的视角(七):异常
  5. SignalR系列教程:SignalR快速入门
  6. android ui自动化测试框架有哪些,自动化测试框架对比(UIAutomator、Appium、Robotium)...
  7. Vue中去掉表单对象上前后空格
  8. SAP Spartacus CMSFlexComponent
  9. mysql修改字段 新增字段
  10. 导致解码延时/丢帧的语法元素—H264
  11. filestream streamreader
  12. 树莓派c语言小车红外,基于树莓派的红外避障小车
  13. php的md5(),PHP中MD5函数效率
  14. 飞到半路被撞?不是小鸟不专心,而是太阳能太晃眼
  15. 计算机三级网络技术最全知识点总结九
  16. 计算机硬盘计入哪个会计科目,电脑加装固态硬盘如何做分录
  17. 如何利用SUM函数合并单元格求和
  18. 生活小常识日常生活小常识
  19. Intellij Idea创建maven项目,App.java代码编辑区没有run选项
  20. SLAM导航机器人零基础实战系列:(四)差分底盘设计——2.stm32主控软件设计

热门文章

  1. WORD图、表标号——题注
  2. python list 查找子列_寻找列表连续的子列
  3. MES系统的选择需重点考虑哪些方面?
  4. 详解24个经典股票技术指标(一)
  5. google code jam 2008 Mousetrap (逆向)
  6. 常用坐标系介绍及转换方式
  7. Axure RP8手机边框
  8. 【网络通信 -- 直播】SRS 实战记录 -- 开源流媒体服务器对比与 SRS 直播效果测试
  9. python写抽奖转盘_python实现大转盘抽奖效果
  10. 查看连打印机的计算机名,查看局域网打印机ip地址的方法步骤