java-爬虫-es

news2024/11/26 10:37:41

文章目录

    • 1.数据来源:数据库、mq、爬虫
    • 2.爬虫:获取想要的页面数据
      • 1.导入依赖
      • 2.爬取核心部分编码
      • 3.测试解析成功
      • 4.封装对象
      • 5.引入es配置类
      • 6.将HtmlParseUtil注册到spring
      • 7.爬取的数据入es库
      • 8.空白文件初始化vue


文献:https://www.kuangstudy.com/bbs/1354069127022583809

1.数据来源:数据库、mq、爬虫

2.爬虫:获取想要的页面数据

1.导入依赖

jsoup:适合爬取解析网页信息等
tika:适合爬取电影、视频、音频等

<dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

2.爬取核心部分编码

public static void main(String[] args) throws Exception {
        new HtmlParseUtil().parseJD("vue").forEach(System.out::println);
    }

    public List<Content> parseJD(String keywords) throws Exception {
        // 获取请求:https://search.jd.com/Search?keyword=java
        String url = "https://search.jd.com/Search?keyword=" + keywords;
        //解析网页,document就是浏览器的document对象
        Document document = Jsoup.parse(new URL(url), 30000);
        //所有js操作都可以通过document对象进行操作

        // 获取商品列表
        Element jGoodsListElement = document.getElementById("J_goodsList");
        // 获取商品标签
        Elements li = jGoodsListElement.getElementsByTag("li");
        List<Content> goodsList = new ArrayList<>(li.size());
        for (Element el : li) {
            String img = el.getElementsByTag("img").eq(0).attr("source-data-lazy-img");
            String price = el.getElementsByClass("p-price").eq(0).text();
            String title = el.getElementsByClass("p-name").eq(0).text();
            goodsList.add(new Content().setImg(img).setTitle(title).setPrice(price));
        }
        return goodsList;
    }

3.测试解析成功

4.封装对象

package com.bie.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author bjh
 * @date 2022/12/12
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Content {

    private String img;
    private String title;
    private String price;
}

5.引入es配置类

package com.bie.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author bjh
 * @date 2022/12/9
 */

@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.229.132", 9200, "http")));
        return client;
    }
}

6.将HtmlParseUtil注册到spring

package com.bie.utils;

import com.bie.pojo.Content;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.stereotype.Component;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * @author bjh
 * @date 2022/12/12
 */
@Component
public class HtmlParseUtil {

    public static void main(String[] args) throws Exception {
        new HtmlParseUtil().parseJD("vue").forEach(System.out::println);
    }

    public List<Content> parseJD(String keywords) throws Exception {
        // 获取请求:https://search.jd.com/Search?keyword=java
        String url = "https://search.jd.com/Search?keyword=" + keywords;
        //解析网页,document就是浏览器的document对象
        Document document = Jsoup.parse(new URL(url), 30000);
        //所有js操作都可以通过document对象进行操作

        // 获取商品列表
        Element jGoodsListElement = document.getElementById("J_goodsList");
        // 获取商品标签
        Elements li = jGoodsListElement.getElementsByTag("li");
        List<Content> goodsList = new ArrayList<>(li.size());
        for (Element el : li) {
            String img = el.getElementsByTag("img").eq(0).attr("source-data-lazy-img");
            String price = el.getElementsByClass("p-price").eq(0).text();
            String title = el.getElementsByClass("p-name").eq(0).text();
            goodsList.add(new Content().setImg(img).setTitle(title).setPrice(price));
        }
        return goodsList;
    }
}

7.爬取的数据入es库

1.在es创建索引"jd_goods"
在这里插入图片描述

2.编写controller

package com.bie.controller;

import com.bie.service.ContentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author bjh
 * @date 2022/12/12
 */
@RestController
public class ContentController {

    @Autowired
    private ContentService contentService;

    @GetMapping("/parse/{keyword}")
    public boolean parse(@PathVariable("keyword") String keyword) throws Exception {
        return contentService.parseContent(keyword);
    }

}

3.编写service

package com.bie.service;

import com.alibaba.fastjson.JSON;
import com.bie.pojo.Content;
import com.bie.utils.HtmlParseUtil;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author bjh
 * @date 2022/12/12
 */
@Service
public class ContentService {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    public boolean parseContent(String keywords) throws Exception {
        // 解析
        List<Content> contents = new HtmlParseUtil().parseJD(keywords);
        // 放入es
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout(TimeValue.timeValueSeconds(1));

        for (int i = 0; i < contents.size(); i++) {
            bulkRequest.add(new IndexRequest("jd_goods")
                    .source(JSON.toJSONString(contents.get(i)), XContentType.JSON));
        }

        BulkResponse bulkResponse = this.restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        return !bulkResponse.hasFailures();
    }

}


4.测试
爬取java相关:
访问:http://localhost:9090/parse/java
在这里插入图片描述

爬取vue相关:
在这里插入图片描述
在这里插入图片描述

8.空白文件初始化vue

初始化vue项目

#1.创建空文件夹
mkdir /home/test && cd /home/test
#2.初始化npm
npm init
#3.安装vue
npm install vue
#vue-min.js文件下载地址,将内容拷贝到vue-min.js文件中
https://cdn.staticfile.org/vue/2.6.11/vue.min.js

#4.安装axios 通信
npm install axios
#5.将初始化的vue目录,拷贝到boot项目中

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

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

相关文章

Java程序员的技术进阶成长路线

据不完全统计&#xff0c;截至目前(2017.07)为止&#xff0c;中国Java程序员的数量已经超过了100万。而且&#xff0c;随着IT培训业的持续发展和大量的应届毕业生进入社会&#xff0c;Java程序员面临的竞争压力越来越大。那么&#xff0c;作为一名Java初级程序员&#xff0c;怎…

【财务】FMS财务管理系统:礼品卡管理

本文总结了FMS财务管理系统中的礼品卡管理&#xff0c;以及如何根据不同类型卡的流程和管理&#xff0c;进行相应的账务处理。 目前在各大电子商务网站或APP购买商品时&#xff0c;在支付时有很多网站都可以使用礼品卡&#xff0c;对于礼品卡的管理也是公司及财务部重点关注的&…

[附源码]Nodejs计算机毕业设计基于WEB的心理测评系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Django期末考试复习

目录一、Django复习内容二、建立一个项目1.进入环境2.建立项目3.打开文件三、建立APP1.进入View文件2.进入Django环境3.建立App四、注册超级用户1.INSTALLED_APPS配置2.建立模型3.数据库的迁移4.进入环境注册超级用户5.开启服务器五、配置数据库一、Django复习内容 二、建立一个…

【云原生进阶之容器】第一章Docker核心技术1.4节——chroot技术

1. 背景 1.1 什么是 chroot chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 `/`,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 `/` 位置。 1.2 为何使用 chroot 在经过 chroot 之后,…

git merge 命令详解

1. 前言 2. 合并场景之 Fast-forward&#xff08;快速合并&#xff09; 3. 合并场景之 three way merge&#xff08;三路合并之正常合并&#xff09; 4. 合并场景之 three way merge&#xff08;三路合并之冲突合并&#xff09; 5. 中止合并 1. 前言 将指定分支合并到当前分支…

继承中国元宇宙之父钱学森先生“灵境”的概念产物—XR电影《告别核桃》代表了什么?

元宇宙大家都不陌生吧&#xff0c;那么你听说过“灵境”吗&#xff1f;你知道“灵境”与元宇宙XR影片《告别核桃》有什么关系吗&#xff1f;在2021年12月9日举行的2021元宇宙产业论坛上&#xff0c;钱学森线上30年前55份珍贵的手稿曝光。原来早在1990年&#xff0c;钱学森就曾在…

MATLAB高通滤波与低通滤波GUI实现代码

1.需搭建的GUI界面 两个axes&#xff0c;一个用于导入原始图像&#xff0c;一个用于输出处理后的头像&#xff0c;并且记好他们的Tag&#xff0c;在代码里会用到 2.导入图片功能代码实现 给一个String为导入图片的button添加callback函数&#xff0c;在这里提供了多种方法 f…

订单增2倍?如何利用促销手段瞄准圣诞季高意向顾客?

圣诞节作为一个类似于中国春节的节日&#xff0c;在12月的最后一周拉开帷幕&#xff0c;据有关业内人士称&#xff0c;作为拥有众多全球站的亚马逊电子商务平台在此次圣诞节的促销狂欢节中表现似乎稍显停滞&#xff0c;其作为电商领域的龙头企业&#xff0c;没能守住其销售总额…

C++对象的初始化和清理,构造函数,析构函数,深拷贝,浅拷贝,初始化列表,静态成员变量,静态成员函数

目录 1、构造函数和析构函数 2、构造函数的分类及调用 3、拷贝构造函数的调用时机&#xff0c;什么时候会用到拷贝构造函数 4、构造函数的调用规则 4.1只要写了一个类&#xff0c;C编译器都会给每个类至少添加三个函数 4.2如果我们写了有参构造函数&#xff0c;编译器就不再…

jsp+ssm计算机毕业设计“原创音乐爱好者”交流网站论文【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

java基础讲义05-数组

数组学习一 一维数组1.1 数组介绍1.2 多个变量和数组对比1.3 数组的定义和初始化1.3.1 数组定义1.3.2 数组初始化1.4 数组访问二 数组内存结构2.1 JVM内存介绍2.1.1一个数组对象的内存图2.1.2常见异常处理三 数组常见操作四 二维数组4.1 二位数组介绍4.2 二维数组定义和初始化4…

C语言---指针初阶---总结

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;鹏哥带我学c带我飞 &#x1f4ac;总结&#xff1a;希望你看…

工业4.0 资产管理壳学习笔记( 6)-管理壳细节

本文是“资产管理壳细节 Part1的读书笔记。 <Details_of_the_Asset_Administration_Shell_Part1_V3.pdf> 要真正了解工业4.0 的管理壳&#xff0c;绕不开认真地读这篇文章。老实说&#xff0c; 第一次读这个文本会发现什么都明白&#xff0c;就是不知道有什么用场。其实学…

三种大数据应用架构介绍

信息技术的发展&#xff0c;如今数据存储能力上升到了 TB、PB 级别&#xff0c;企业和政府部门都以各种形式存储了大量的数据&#xff0c;如何快速有效地处理规模大、结构复杂的数据&#xff1f;本文主要介绍大数据的三类应用架构MapReduce、Hadoop、Spark&#xff0c;进行数据…

项目:德波量化(DealBot)

概述 德波量化&#xff08;DEALBOT&#xff09;项目研发始于2015年&#xff0c;初衷是建立一个可以自己编写交易策略&#xff0c;又可以自动化交易的小软件。为了这个目的&#xff0c;广泛搜寻了现有的开源量化交易软件&#xff0c;包括国外的Backtrader、zipline、Pysystemtr…

SSM整合01:

1.1原始方式整合 11.编写相应配置文件 Spring配置文件&#xff1a;applicationContext..xml SprngMVCi配置文件&#xff1a;spring-mvc.xml MyBatis映射文件&#xff1a;AccountMapper..xml .MyBatis核心文件&#xff1a;sqlMapConfig.xml 数据库连接信息文件&#xff1a;idbc.…

[C++数据结构](34)B树

文章目录B 树概念与性质B 树基本操作与实现框架查找插入遍历B 树性能分析及其优势B 树概念与性质 1970 年&#xff0c;R.Bayer 和 E.mccreight 提出了一种适用于外查找的树&#xff0c;它是一种平衡的多叉树&#xff0c;称为 B 树&#xff08;或 B-树、B_树&#xff09;。 一…

数字先锋 | 主机、硬盘、CPU统统没有? 这个电教室有点“潮”!

百年大计&#xff0c;教育为本。在数字中国建设整体布局和推进下&#xff0c;教育新基建为教育高质量发展构筑了数字底座&#xff0c;更为教育创新变革提供了强大的技术基础和应用环境。近年来&#xff0c;教育部门紧抓新一代信息技术发展机遇&#xff0c;赋能学校高质量发展&a…

使用YOLOV5训练口罩检测模型

一、YOLOV5源码和口罩数据集的下载与导入 我是在github上下载的&#xff0c;地址是GitHub - ultralytics/yolov5 at v7.0&#xff0c;下载之后&#xff0c;我将其导入pycharm环境中&#xff0c; 数据集在roboflow上面下载的&#xff0c;地址是Computer Vision Datasets&#…