2024年最全Elasticsearch (爬虫)集成,2024年最新面试问为什么长时间没找到工作

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

</parent>

 <dependencies>
    <!-- webMagic 依赖 -->
    <dependency>
        <groupId>us.codecraft</groupId>
        <artifactId>webmagic-core</artifactId>
        <version>0.8.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>us.codecraft</groupId>
        <artifactId>webmagic-extension</artifactId>
        <version>0.8.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!--  es  依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

    <!--  mybatisPlus starter-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3</version>
    </dependency>

    <!--  lombok 依赖-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
    </dependency>

    <!--  web starter  Controller层-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--  mysql的驱动包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- 单元测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>

    <!-- springBoot  测试依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--  hutool  -->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.11</version>
    </dependency>

    <!--  分页插件 -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.1</version>
    </dependency>
</dependencies>

XML


* application.yml



server:
port: 8989

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/eee?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
username: root
password: root

elasticsearch:
    rest:
        uris: 192.168.126.133:9200

集成mybatis-plus

mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


YAML


##### 4.2、爬取房源信息


* 编写测试类,要爬取的网址:[北京租房信息|北京租房租金\_价格\_房价|房产网-安居客租房网]( )



package com.llh;

import com.llh.domain.WebHouse;
import us.codecraft.webmagic.*;
import us.codecraft.webmagic.pipeline.Pipeline;
import us.codecraft.webmagic.processor.PageProcessor;

import java.util.ArrayList;
import java.util.List;

/**

  • User: sunjunfu

  • DateTime: 2023/9/23 8:54
    */
    public class House implements PageProcessor {
    private Site site = Site.me().setRetryTimes(3).setSleepTime(100);

    @Override
    public void process(Page page) {
    // System.err.println(page.getHtml());

     // 标题
     List<String> titles = page.getHtml().xpath("//div[@class='zu-info']/h3/a/b/text()").all();
     // 价格
     List<String> prices = page.getHtml().xpath("//div[@class='zu-side']/p/strong/b/text()").all();
     // 中间人
     List<String> brokers = page.getHtml().xpath("//p[@class='details-item tag']/text()").all();
     // 规格
     List<String> b1s = page.getHtml().xpath("//p[@class='details-item tag']/b[1]/text()").all();
     List<String> b2s = page.getHtml().xpath("//p[@class='details-item tag']/b[2]/text()").all();
     System.err.println(titles);
     System.err.println(prices);
     System.err.println(brokers);
     System.err.println(b1s);
     System.err.println(b2s);
    
     List<WebHouse> list = new ArrayList<>();
    
     for (int i = 0; i < titles.size(); i++) {
         String title = titles.get(i);
         String price = prices.get(i);
         // 拼接规格
         String b1 = b1s.get(i);
         String b2 = b2s.get(i);
         String area = b1 + "室" + b2 + "厅";
    
         // 去掉空格再截取,或者中间人
         String str = brokers.get(i);
         String trim = str.trim();
         String broker = trim.split(" ")[1];
    
         // 给对象赋值
         WebHouse house = new WebHouse();
         house.setTitle(title);
         house.setPrice(price);
         house.setArea(area);
         house.setBroker(broker);
    
         // 添加到集合
         list.add(house);
     }
     System.out.println(list);
     page.putField("house", list);
    

    }

    @Override
    public Site getSite() {
    return site;
    }

    public static void main(String[] args) {
    Spider.create(new House())
    .addUrl(“https://bj.zu.anjuke.com/?t=1&from=0&comm_exist=on&kw=3%E5%B1%85%E5%AE%A4”)
    .addPipeline(new Pipeline() {
    @Override
    public void process(ResultItems resultItems, Task task) {
    WebHouse house = resultItems.get(“house”);
    }
    })
    .thread(5)
    .run();
    }
    }


Java


##### 4.3、同步到es


* 同步之前,需要在实体类加上 `@Document` 注解,以及要查询的字段指定分词器和类型 [![house](https://img-blog.csdnimg.cn/img_convert/808e0b0bae975ae71d1a1626f8dd875b.png)](https://assets.llhnp.com/usr/images/web_house/house.png)
* 使用es提供的同步接口



package com.llh.repository;

import com.llh.domain.WebHouse;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

/**

  • User: sunjunfu
  • DateTime: 2023/9/23 9:56
    */
    @Repository
    public interface WebHouseRepository extends CrudRepository<WebHouse,Integer> {
    }

Java


* 在测试类调用爬取的数据同步到es



@Test
public void test3(){
Spider.create(new House())
.addUrl(“https://bj.zu.anjuke.com/?t=1&from=0&comm_exist=on&kw=3%E5%B1%85%E5%AE%A4”)
.addPipeline(new Pipeline() {
@Override
public void process(ResultItems resultItems, Task task) {
List house = resultItems.get(“house”);
// 存入数据库
webHouseService.saveBatch(house);
// 全量同步到es
webHouseRepository.saveAll(house);
}
})
.thread(5)
.run();
}


Java


##### 4.4、编写测试接口


* WebHouseController.java



package com.llh.controller;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.llh.domain.WebHouse;
import com.llh.form.HouseForm;
import com.llh.repository.WebHouseRepository;
import com.llh.service.WebHouseService;
import com.llh.utils.Result;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**

  • User: sunjunfu

  • DateTime: 2023/9/23 10:19
    */
    @RestController
    @RequestMapping(“/house”)
    public class WebHouseController {
    @Autowired
    WebHouseService webHouseService;

    @Autowired
    WebHouseRepository webHouseRepository;

    @Autowired
    ElasticsearchRestTemplate elasticsearchRestTemplate;

    // 初始化 同步到es
    @PostConstruct
    public void init(){

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值