IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ElasticSearch学习 (三)模仿京东搜索 仅后台 -> 正文阅读

[大数据]ElasticSearch学习 (三)模仿京东搜索 仅后台

集成jsoup

   <dependency>
      <!-- jsoup HTML parser library @ https://jsoup.org/ -->
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.10.2</version>
    </dependency>

解析html页面

@Component
public class HtmlParseUtil {
//https://search.jd.com/Search?keyword=java  网站
//    public static void main(String[] args) throws Exception {
//        new HtmlParseUtil().parseJd("java").forEach(System.out ::println);
//    }
    public List<Content> parseJd(String keywords) throws Exception {

        String url="https://search.jd.com/Search?keyword="+keywords;
        // 解析网页获取 document
        Document document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 5.1; zh-CN) AppleWebKit/535.12 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/535.12").timeout(30000).get();
//        System.out.println(document);
        // 找到商品位置
        Element element = document.getElementById("J_goodsList");
        // 解析li标签
        Elements li = element.getElementsByTag("li");
        ArrayList<Content> contentList = new ArrayList<Content>();
        for (int i = 0; i < li.size(); i++) {
            // 图片
            String img = li.get(i).getElementsByTag("img").attr("data-lazy-img");
            // 价格
            String price = Arrays.asList(li.get(i).getElementsByClass("p-price").eq(0).text().split("¥")).get(1);
            // 标题
            String title = li.get(i).getElementsByClass("p-name").eq(0).text();
//            System.out.println("----------------------");
//            System.out.println(img);
//            System.out.println(price);
//            System.out.println(title);
            Content content = new Content();
            content.setTitle(title);
            content.setImg(img);
            content.setPrice(price);
            contentList.add(content);
        }
        return contentList;
    }
}

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Content {
    private String title;
    private String img;
    private String price;

}

controller层

@RestController
public class ContentController {
    @Autowired
    private ContentService contentService;

    @GetMapping("/parse/{keyword}")
    public Boolean parse(@PathVariable("keyword") String keyword) throws Exception {
        return contentService.parseContent(keyword);
    }
    @GetMapping("/parse/{keyword}/{pageNo}/{pageSize}")
    public List<Map<String,Object>> search(@PathVariable("keyword") String keyword,
            @PathVariable("pageNo")int pageNo,
            @PathVariable("pageSize")int pageSize) throws IOException {
        List<Map<String,Object>> list = contentService.searchContent(keyword, pageNo, pageSize);
        return list;
    }
}

业务层

@Service
public class ContentService {
     @Autowired
     private RestHighLevelClient restHighLevelClient;
     public boolean parseContent(String keywords) throws Exception {
         List<Content> contentList = new HtmlParseUtil().parseJd(keywords);
         BulkRequest bulkRequest = new BulkRequest();
         bulkRequest.timeout("2m");
         for (int i=0;i < contentList.size(); i++){
             bulkRequest.add(
                     new IndexRequest("jd_goods")
                     .source(JSON.toJSONString(contentList.get(i)), XContentType.JSON));
         }
         BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
         return bulkResponse.hasFailures();
     }

     // 获取数据实现查询
     public List<Map<String,Object>> searchContent(String keyword,int pageNo,int pageSize) throws IOException {
         if (pageNo < 1) {
             pageNo = 1;
         }
         //条件搜索
         SearchRequest searchRequest = new SearchRequest("jd_goods");
         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

         //分页
         searchSourceBuilder.from(pageNo);
         searchSourceBuilder.size(pageSize);

         //放入条件
         TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title",keyword);
         searchSourceBuilder.query(termQueryBuilder);
         searchSourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));

         // 执行搜索
         searchRequest.source(searchSourceBuilder);
         SearchResponse searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);

         //解析结果
         List<Map<String,Object>> list = new ArrayList<>();
         for (SearchHit searchHit : searchResponse.getHits()) {
             list.add(searchHit.getSourceAsMap());
         }
         return list;
     }
}

最终实现结果:

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:34:35  更:2021-10-23 12:34:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:10:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码