如何利用Java爬取网站数据?

news2024/7/6 17:51:48

1.Jsoup介绍

- 官网文档:https://jsoup.org

- Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

2. Jsoup快速入门

- 获取网页标题

 String url = "https://search.jd.com/Search?keyword=手机&wq=手机&page=1";
  Document document = Jsoup.connect(url).get();
  String title = document.select("title").text();
  System.out.println(title);
  ```

- 运行效果:手机 - 商品搜索 - 京东

3. 网站数据分析

3.1 分析网站的访问地址

- 以京东商城为例,商品分页列表的url地址,需要带如下几个参数,因此,在发送http请求时,需要携带正确的参数。

- URL:https://search.jd.com/Search?keyword=手机&wq=手机&page=1

3.2 分析网站的页面结构

- 通过浏览器的开发者工具,可以分析出页面中我们需要的html结构。

<img src="assets/image-20220717171103097.png" alt="image-20220717171103097" style="zoom:67%;" />
  • 可以看出,我们需要的商品数据,封装在一个id=J_goodsList的div标签中,我们可以方便的通过DOM解析出这块数据。

4. 实战实现过程

- 获取第1页的商品基本数据

public static void main(String[] args) throws Exception {
    //1页地址
    String url = "https://search.jd.com/Search?keyword=手机&wq=手机&page=1";
    //发送http请求
    Document document = Jsoup.connect(url).get();
    //id=J_goodsList的div下,获取所有带有data-sku属性的li标签
    Elements lis = document.select("div[id=J_goodsList] li[data-sku]");
    lis.forEach(
            li -> {
                //获取商品sku
                String sku = li.attr("data-sku");
                //获取商品name
                String name = li.select("div[class='p-name p-name-type-2'] a em").text();
                //获取商品图片地址
                String img = li.select("div[class=p-img] a img[data-lazy-img]").attr("data-lazy-img");
               
                System.out.println(String.format("%s, %s, %s", sku, name, img));
            }
    );
}
  • 效果预览

  • 在这里插入图片描述

  • 改造为分页获取

  • `public static void main(String[] args) throws Exception {
    //第N页地址
    String url = “https://search.jd.com/Search?keyword=手机&wq=手机&page=” + i;
    //发送http请求
    Document document = Jsoup.connect(url).get();
    //在id=J_goodsList的div下,获取所有带有data-sku属性的li标签
    Elements lis = document.select(“div[id=J_goodsList] li[data-sku]”);
    lis.forEach(
    li -> {
    //获取商品sku
    String sku = li.attr(“data-sku”);
    //获取商品name
    String name = li.select(“div[class=‘p-name p-name-type-2’] a em”).text();
    //获取商品图片地址
    String img = li.select(“div[class=p-img] a img[data-lazy-img]”).attr(“data-lazy-img”);

              System.out.println(String.format("%s, %s, %s", sku, name, img));
          }
    

    );
    }`

Java最新课程:

Java零基础视频教程(2022最新Java入门,含斯坦福大学练习题+力扣算法题

Java基础入门:

java零基础自学首Java入门教程(含Java项目和Java真题)

Javaweb核心基础

JavaWeb基础教程,Java web从入门到企业实战完整版

Spring Cloud最全微服务架构

史上最全面的springcloud微服务技术栈

SSM框架教程:

SSM框架教程_Spring+SpringMVC+Maven高级+Spring

SpringBoot2全套视频教程:

SpringBoot2全套视频教程,springboot零基础到项目实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP--三次握手和四次挥手

原文网址&#xff1a;TCP--三次握手和四次挥手_IT利刃出鞘的博客-CSDN博客 简介 本文介绍TCP的三次握手和四次挥手。即&#xff1a;TCP建立连接和断开连接的过程。 三次握手 流程图 主机 A为客户端&#xff0c;主机B为服务端。 第一次握手 A 发送同步报文段&#xff08;SYN…

小程序初始创建

1. 注册小程序账号 官网&#xff1a; https://mp.weixin.qq.com/wxopen/waregister?actionstep1 2. 下载小程序 官网&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 百度网盘&#xff08;非最新版&#xff09; https://pan.baidu…

部署SNMP使网管与设备通信,配置关于TCP测试NQA的配置案例

一、部署SNMP 组网需求&#xff1a;通过部署RouterA由NMS网管设备管理用于监控网络是否畅通和业务是否正常。为了保证NMS和RouterA之间有一个数据传输安全、接入方式灵活、链路传输可靠的网络&#xff0c;并且可以实时监控设备的运行情况&#xff0c;网络中的RouterA通过网管实…

Databend 开源周报 #70

Databend 是一款强大的云数仓。专为弹性和高效设计&#xff0c;自由且开源。 即刻体验云服务&#xff1a;https://app.databend.com。 What’s New 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 Features & Improvements Format 更好地检查格…

PCB 二:AD 原理图绘制以及PCB绘制

PCB 二&#xff1a;AD 原理图绘制以及PCB绘制前言(一)资料总结(二)PCB前言 本文简单收集了AD软件在绘制PCB电路板的一些资料&#xff0c;还有遇到的一些问题&#xff0c;并记录一些常用的操作。 (一)资料总结 1【AD】Altium Designer 原理图的绘制 2【AD】Altium Designer P…

飞利浦CT的AI重建技术

原文&#xff1a;AI for significantly lower dose and improved image quality 飞利浦医疗CT的深度学习重建技术。 人工智能可显着降低剂量并提高图像质量概述背景飞利浦CT智能工作流Precise Image 如何训练神经网络深入了解深度学习训练神经网络验证神经网络推断法可以实现快…

Android 11及以上授予文件管理权限

背景 安卓11改变了此前安卓系统对于文件管理的规则,在安卓11上,文件读写变成了特殊权限。应用默认只能读写自己的目录/android/data/包名 gradle配置 Android11系统对应用写入权限做了严格的限制。本文介绍如何获取文件读写权限。 项目中 build.gradle 的targetSdkVersion …

YOLOv5 模型结构及代码详细讲解(一)

王旭*&#xff0c;沈啸彬 *, 张钊* (淮北师范大学计算机科学与技术学院&#xff0c;淮北师范大学经济与管理学院&#xff0c;安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. &#x1f31e;欢迎来到深度学习的世界 …

window本地编译Spring源码并运行

1. Gradle 下载地址 https://services.gradle.org/distributions/ 2. Jdk下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/#java11-windows 3. Spring源码下载地址 https://github.com/spring-projects/spring-framework/tags 4. 注意事项 以…

微服务守护神-Sentinel-流控规则

引言 书接上篇 微服务守护神-Sentinel-概念 &#xff0c;上面介绍了Sentinel相关概念&#xff0c;本篇就来看下Sentinel的流控规则。 流控规则 流量控制&#xff0c;其原理是监控应用流量的QPS(每秒查询率) 或并发线程数等指标&#xff0c;当达到指定的阈值时 对流量进行控…

OSG开发-使用VisualStudio2019创建CMake项目方式开发HelloOSG

本文保证你使用VS2019&#xff0c;可以把这个OSG程序开发出来&#xff0c;看到那个蓝色的带有纹理的地球。 大概步骤如下&#xff1a; 下载已经编译好的OSG的库和头文件新建一个CMake项目编辑make.txt编写main.cpp运行。下载已经编译好的OSG的库和头文件 由于我们需要用OSG的…

blender 常用修改器

文章目录前置.阵列.倒角.布尔.精简.拆边.镜像.螺旋.实体化表面细分.三角化.体积到网格.焊接修改器.蒙皮.线框.铸型.曲线修改器.置换修改器.晶格修改器.缩裹修改器.简易修改.表面形变修改 .多级精度修改器.前置. 注意&#xff0c;修改器未应用前&#xff0c;只能操作原物体 阵…

自动驾驶:2022 apollo day 观后感(三)

自动驾驶&#xff1a;2022 apollo day 观后感&#xff08;三&#xff09;TOPIC THREE&#xff1a; 文心大模型在自动驾驶感知中的落地应用&#xff08;王井东&#xff09;多传感器融合autolabeling的发展&#xff1a;大模型数据闭环大模型&#xff0c;已经成为自动驾驶能力提升…

差动驱动机器人轨迹-CoCube

轨迹博客&#xff1a; 玫瑰线轨迹如何规划&#xff1f;&#xff08;desmosROS2turtlesim……&#xff09; ROS1云课→23turtlesim绘制小结&#xff08;数学和编程&#xff09; 如上所涉及的机器人假定模型都是差动驱动机器人。 许多移动机器人使用一种称为差动驱动的驱动机构…

vue项目图片裁剪上传——vue-cropper的使用,裁剪后上传头像

vue项目图片裁剪上传——vue-cropper的使用&#xff0c;裁剪后上传头像 npm地址&#xff1a;https://www.npmjs.com/package/vue-cropper github地址&#xff1a;https://github.com/xyxiao001/vue-cropper 在线demo&#xff1a;http://github.xyxiao.cn/vue-cropper/exampl…

学习分享:如何进行全局变量的学习

​对于很多朋友&#xff0c;尤其是刚接触全局变量的朋友而言&#xff0c;全局变量的学习对他们来说不是一件容易的事情。关于这方面的学习&#xff0c;很多朋友不太理解它的用法及分析方法&#xff0c;所以会比较乱&#xff0c;难以掌握。 什么是axure全局变量&#xff1f;全局…

【STM32】详解PWM的概念和原理

PWM的概念和原理一、PWM是什么&#xff1f;二、如何实现&#xff1f;三、STM32中的PWM四、使用库函数配置PWM将LED0设置为呼吸灯一、PWM是什么&#xff1f; PWM&#xff08;Pulse width modulation&#xff09;脉冲宽度调制。PWM是通过编程控制输出方波的频率和占空比&#xf…

oracle自启动的p***并行进程过多导致的process进程超限问题

某项目现场反馈无任何业务连接&#xff0c;查询v$process仍有500多个进程&#xff1b; 查询会话连接&#xff0c;也只有十几个会话&#xff1b; select b.MACHINE, b.PROGRAM,b.USERNAME, count(*) from v$process a, v$session b where a.ADDR b.PADDR and b.USERNAME is…

RCNN学习笔记-ResNeXt

论文地址&#xff1a;https://arxiv.org/pdf/1611.05431.pdf Abstract 我们提出了一种简单、高度模块化的图像分类网络体系结构。我们的网络是通过重复一个构建块来构建的&#xff0c;该构建块聚合了一组具有相同拓扑的变换。我们的简单设计产生了一个只有几个超参数可设置的…

JavaScript -- 数组常用方法及示例代码总结

文章目录数组的方法1 Array.isArray()2 at()3 concat()4 indexOf()5 lastIndexOf()6 join()7 slice()8 push()9 pop()10 unshift()11 shift()12 splice()13 reverse()14 sort()15 forEach()16 filter()17 map()18 reduce()数组的方法 Array参考文档&#xff1a;https://develo…