新用户注册入口 老用户登录入口

[转载]java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据

文章作者:转载 更新时间:2023-03-13 10:48:12 阅读数量:103
文章标签:京东页面jsoupJPA页面解析商品数据抓取
本文摘要:本文作者在学习Java爬虫技术过程中,以黑马视频资源为基础,针对京东页面进行了数据抓取实践。采用SpringBoot框架结合JPA进行项目搭建,并利用httpClient发送HTTP请求,通过jsoup解析HTML文档结构。由于目标网页结构有所变化,作者记录了解决登录验证问题(通过模拟浏览器设置User-Agent头)和空字符串导致的NumberFormatException异常(对商品SPU属性值进行非空判断)的过程。文中详细介绍了定时任务(@Scheduled)实现每隔100秒自动执行爬虫,从京东手机类目中获取并存储商品信息的具体代码逻辑,包括页面解析、商品数据抓取及图片下载等关键步骤。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_32161697/article/details/114506244。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

最近在学习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,需要登录京东

290a5888afb22cda4f7b8f16994ea2c2.png

看到这段代码应该就明白了吧,就是京东发现并非人为操作,需要登陆账号了。解决办法也很简单,只需要自己模拟浏览器登陆即可

在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为空串,加上一个前置空串判断即可

2fd6fe3ce87cb2337a83bd22ed690487.png

解决如下:

//获取商品spu

String attr = spuEle.attr("data-spu");//判断是否为空串

long spu = Long.parseLong(attr.equals("")?"0":attr);

以上两个bug是我学习遇到的,现已解决,爬取数据如下:

0a3920b40cc77c2e672e5b6fafb751ce.png

b3aa769a3f21ac5f5e479d1ced819a99.png

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_32161697/article/details/114506244。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
Java爬虫技术Java爬虫技术是一种利用Java编程语言实现的网络数据抓取工具,通过模拟用户浏览器行为发送HTTP请求,获取网页HTML内容,并进一步解析、抽取和处理所需信息的技术手段。在本文中,作者学习并实践了Java爬虫技术,用于从京东商城抓取手机类商品的数据。
SpringBoot框架SpringBoot是由Pivotal团队开发的一款开源Java应用程序框架,它简化了Spring应用的初始搭建以及开发过程,提供了一种快速构建独立、生产级别的基于Spring框架的应用程序的方式。在文中,项目采用SpringBoot框架进行搭建,结合JPA(Java Persistence API)实现对爬取数据的持久化存储管理。
JPA(Java Persistence API)JPA是Java平台上的一个规范,为Java开发者提供了对象关系映射(ORM)的功能,使开发者可以使用面向对象的方式来操作数据库。在文章的场景下,JPA被应用于SpringBoot项目中,用以简化数据库操作,将爬取的商品数据自动映射到实体类,并通过ORM方式方便地与数据库进行交互和数据持久化。
HttpClientApache HttpClient是一个强大的Java库,用于执行HTTP协议相关的客户端功能,如GET、POST等请求,获取HTTP响应结果。在本文的爬虫项目中,HttpClient被用来发起对京东页面的HTTP请求,获取商品列表页面的HTML源码。
JsoupJsoup是一个基于Java的HTML解析器,它可以非常方便地提取和操作HTML文档中的数据,支持CSS选择器来查找元素。在该篇文章的爬虫实践中,Jsoup用于解析从京东页面获取的HTML内容,从中提取出商品SPU、SKU、价格、标题、图片链接等具体信息。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在学习Java爬虫技术并实践于京东商品信息抓取的过程中,可能会遇到各种实际问题,如网页结构变化、登录验证机制、数据解析异常等。这些问题的解决不仅有助于提升个人编程能力,更对了解反爬机制与合法合规的数据抓取有重要启示作用。

近期,关于网络爬虫技术的法律边界和道德规范引起了广泛关注。2022年,中国最高人民法院发布了《关于审理使用人脸识别技术处理个人信息相关民事案件适用法律若干问题的规定》,其中强调了在数据抓取过程中应尊重用户隐私权和个人信息安全。这意味着,在开发爬虫项目时,除了关注技术实现外,开发者还需严格遵守相关法律法规,确保数据来源的合法性。
另外,各大电商平台针对爬虫行为不断升级反爬策略,例如采用动态加载、加密参数、验证码等方式防止非授权抓取。在这种情况下,学习和研究如何通过模拟登录、设置合适的请求头(如User-Agent)、以及运用更高级的网络代理、IP池等手段绕过反爬机制,成为爬虫开发者必须掌握的技术要点。
与此同时,对于页面数据解析环节,诸如Jsoup这样的HTML解析库虽然强大易用,但在面对复杂多变的网页结构时,可能需要结合XPath或CSS选择器等更多工具进行精细化处理。此外,随着JavaScript渲染技术在现代网页中的广泛应用,传统的HTTP请求方式已无法满足部分动态加载内容的抓取需求,因此引入Selenium、Puppeteer等无头浏览器工具进行交互式爬虫开发已成为一种趋势。
总之,在深入学习和应用Java爬虫技术的同时,我们应当紧跟技术发展潮流,并时刻保持对法律、伦理及技术挑战的关注,以确保我们的爬虫项目既高效又合规。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
chown user:group file - 改变文件的所有者和组。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
RabbitMQ实战中因API版本问题导致消息丢失的排查与修复 03-12 jQuery元素滚动动画库插件-ScrollMagic 02-09 属性级联同步与实体管理:Hibernate实战案例详解 01-27 jQuery超酷3D包装盒封面旋转特效 05-16 ElSteps组件动态改变当前步骤时样式更新滞后问题的Vue.js解决方案 02-22 java中处理异常的方式和语句 01-13 AI助手的工作原理与限制:无法按特定要求撰写的原因及信息处理分析 12-27 代码写的html网红钟表 12-18 简约大气文艺工作者作品展示网站模板 09-21 本次刷新还10个文章未展示,点击 更多查看。
ClickHouse系统重启情境下的数据丢失风险与应对:写入一致性、同步模式及备份恢复策略实践 08-27 jQuery带放大镜的迷你幻灯片插件 08-16 简约手机UI设计公司网站模板下载 04-30 绿色经典响应式主机服务器托管网站模板 04-25 PostgreSQL中应对密码过期警告:安全更改密码的步骤与注意事项 04-17 docker改tag(docker改配置文件) 03-17 [转载]蓝桥 利息计算(Java) 03-11 jquery文字动画特效插件animatext 01-22 大气简洁手机电子产品展示柜台前端模板 01-22 [转载]ubuntu用户和权限介绍 01-10 可爱毛绒玩具网上商城响应式网站模板 01-05
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"