上一节课我们使用多线程实现了我们的爬虫,但是,每次运行爬虫还是特别的麻烦。这节课,我们就学习如何使用web应用将爬虫包装起来。
我们将使用spring boot快速搭建一个web应用,关于spring boot的具体细节我们不多说,感兴趣的同学可以阅读文章Spring Boot——开发新一代Spring Java应用。
我们首先在pom中将spring-boot-starter-parent
作为我们的父项目,然后引入spring-boot-starter-web
,该依赖会帮助我们默认配置好spring web。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
编写一个类包含处理HTTP请求的方法以及一个main()
函数:
@SpringBootApplication
@EnableAsync
public class Application {
public static void main(String[] args) throws IOException, URISyntaxException {
SpringApplication.run(Application.class);
}
}
有两种方法可以启动应用:
java
)启动main函数,IDE中一般都自带Maven,能够帮助我们下载安装Maven依赖。mvn spring-boot:run
,但是此种方法要求你在本地环境中必须安装Maven在控制台中可以发现启动了一个Tomcat容器,一个基于Spring MVC的应用也同时启动起来。这样,一个最简单web应用就创建好了,接下来,我们将我们的爬虫应用包装起来。
对于一个爬虫应用来说,以下两个功能是必不可少的:
现在我们就将这两个功能在web服务中暴露出来:
@RestController
public class CrawlerController {
@Autowired
private final Crawler crawler = new MultiCrawlerWithList();
@GetMapping("/start")
public void start() throws InterruptedException {
multiCrawler.run();
}
@GetMapping("/songs")
public List<Song> songs() {
return multiCrawler.songs;
}
}
编写完成后重新启动应用,访问以下两个地址即可:
注意,这里我们使用了spring的依赖式注入,spring会自动帮我们实例化MultiCrawler
对象,更多关于spring MVC的内容,请查看课程打造功能完整的博客系统:Spring MVC实战入门。
另外,我们还将multiCrawler.run()
方法变为异步执行,这样我们在发起运行请求之后,应用就会在后台运行爬虫程序,我们不需要一直等待。
登录发表评论 登录 注册