手把手写个爬取it博客的网站-框架搭建

陆陆续续折腾一周的网站上线了,地址在这里https://blogsel.me

这个网站主要汇聚了一些优秀的IT类博客的文章索引,用户在这里就可以看到全网很多大牛和牛X团队的技术博客,可谓干货满满。

针对这个网站的实现过程,分为8篇文章分别说明:

0.手把手写个爬取IT博客的网站-提纲
1.手把手写个爬取IT博客的网站-需求分析
2.手把手写个爬取IT博客的网站-技术选型
3.手把手写个爬取IT博客的网站-框架搭建
4.手把手写个爬取IT博客的网站-数据采集
5.手把手写个爬取IT博客的网站-数据展示
6.手把手写个爬取IT博客的网站-域名申请和服务器采购
7.手把手写个爬取IT博客的网站-系统上线
8.手把手写个爬取IT博客的网站-网站优化

本篇为本系列文章的第二篇:手把手写个爬取IT博客的网站-框架搭建

项目框架搭建的基本过程其实就是一个最基础的spring boot项目的启动过程,网上有非常多的资料,这里这是简单将项目搭建的关键过程描述下。

新建项目

使用idea新建一个maven工程,pom.xml中引入核心依赖:

<!-- spring boot start-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring.boot.version}</version>
      <type>pom</type>
      <scope>import</scope>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <version>${spring.boot.jpa.version}</version>
  </dependency>
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${springframework.version}</version>
  </dependency>

  <!-- sqlite start -->
  <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
      <version>3.20.0</version>
  </dependency>
  <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>2.1.1</version>
  </dependency>
  <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>5.0.3.Final</version>
  </dependency>
  <dependency>
      <groupId>com.enigmabridge</groupId>
      <artifactId>hibernate4-sqlite-dialect</artifactId>
      <version>0.1.2</version>
  </dependency>

  <!-- ehcache-->
  <dependency>
      <groupId>org.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>${ehcache.version}</version>
  </dependency>
  <dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache-core</artifactId>
      <version>${ehcache.core.version}</version>
  </dependency>

  <!--lombok-->
  <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>compile</scope>
      <version>${lombok.version}</version>
  </dependency>

  <!--jsoup html parser-->
  <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.8.1</version>
  </dependency>
  <!-- baidu api-->
  <dependency>
    <groupId>com.baidu.aip</groupId>
    <artifactId>java-sdk</artifactId>
    <version>4.4.1</version>
</dependency>
  <!--test-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <version>${spring.boot.version}</version>
  </dependency>

如之前技术选型中所说:

  • 数据库采用sqlite,故引入sqlite依赖
  • 数据采集使用jsoup,所以引入jsoup依赖
  • 另外使用百度的自然语言处理api来对文章做自动分类和标签化,所以引入百度api

核心配置

server.port=8081
#模版热部署
spring.thymeleaf.cache=false
spring.thymeleaf.mode=LEGACYHTML5

#数据库配置
spring.jpa.show-sql=true
spring.jpa.database-platform=com.enigmabridge.hibernate.dialect.SQLiteDialect
spring.jpa.generate-ddl=true
sqlite.url=jdbc:sqlite:/data/website/blog.db

#百度自然语言处理api调用参数
api.baidu.nlp.app.id=myAppid
api.baidu.nlp.app.key=myAppkey
api.baidu.nlp.secret.key=myKey

sqlite数据库配置

数据库采用sqlite,需要配置其数据源

@Configuration
public class DataSourceConfiguration
{

    @Value("${sqlite.url}")
    private String sqliteUrl;
    @Bean(destroyMethod = "", name = "EmbeddeddataSource")
    public DataSource dataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.sqlite.JDBC");
        dataSourceBuilder.url(sqliteUrl);
        dataSourceBuilder.type(SQLiteDataSource.class);
        return dataSourceBuilder.build();
    }

}

定时采集数据任务配置

  • 启动主类Application 中增加注解:@EnableScheduling
  • 添加定时任务类
@Component
public class ScheduledCollect {
    private Logger logger = LoggerFactory.getLogger(ScheduledCollect.class);
    @Autowired
    CollectorRepository collectorRepository;
    @Autowired
    private ApplicationContext applicationContext;
    /**
    * 每天夜里23点采集数据
    **/
    @Scheduled(cron="0 0 23 * * ?")
    public void collect() {
        List<Collector> collectors = collectorRepository.findAllByState(true);
        for(Collector collector :collectors){
            AbstractCollect collect = (AbstractCollect) applicationContext.getBean(collector.getClassName());
            logger.info("采集:{}",collector.getAuthor());
            collect.collect();
        }
    }
}

利用百度自然语言处理api对文章进行分类和打标签

虽然抓取的主要是IT博客,但是不排除有的博客会发布一些非技术文章,针对这些非技术文章可以用上述api做分类。 这里推荐百度自然语言处理apihttps://ai.baidu.com/docs#/NLP-API/3e14446d,其他大厂如腾讯等也有类似的api,没有一一了解,用哪个纯粹看心情。 百度的这些api没有调用量限制,只有QPS限制(不能超过5),基本是可以满足我的需求的。 具体使用方法百度有非常全面的文档,这里不再赘述。

上面为项目主体的关键配置和代码 剩下的就是实现各个模块:数据库层、采集层,页面等内容,不一一赘述

猜你喜欢

转载自blog.csdn.net/mooyinn/article/details/81251774