一、java端:
1、创建一个微服务,然后在控制层编写接口(postman发送请求调用接口)
@GetMapping("/reptile")
public Integer reptile() {
productClient.getReptile();
}
2、创建一个fegin来发送http请求给java,注解参数需要name(根据自己需要写)和url(地址加端口号,地址建议使用127.0.0.1,端口号需要指定和python端口相同)
@FeignClient(name = "aiot-reptile-product", url = "127.0.0.1:8040")
public interface AIoTProductClient {
/**
* 发送http请求给Python
* @return 爬虫数据
*/
@GetMapping("/getReptile")
Integer getReptile();
}
二、python端:
1、在脚本可以正常运行的前提下,引入flask框架
from flask import Flask
app = Flask(__name__)
2、配置java请求方法入口,路径要和fegin里面的请求路径相同,method默认为GET,如果是post需要指明。
@app.route("/getReptile",methods=['POST/GET'])
def main():
3.在启动入口代码处加端口号和ip地址
if __name__ == '__main__':
app.run(port=8040, host='0.0.0.0')
三、调用流程和原理
java调用python其实就是发送http请求,以上这种方式是我觉得最简单的一种,java可以发送post请求传递json类型参数,python端也可以接收json类型的参数,只不过python返回的结果的数据的类型需要java端进行对应的处理,我用这种方式进行了爬虫脚本的调用和将爬虫结果的存储,通过批量插入操作存入数据库。
python端代码经过修饰后,启动脚本就是启动了一个监听器,监听对应ip加端口的http请求。类似于微服务,可以在前台或后台一直挂起。
四、总结
我也是在公司开发中遇到这样的问题,因为项目上的功能需要获取某一网站上的一些文章,我使用java+python的技术进行xx-job定时任务的调用,每天定时调用java代码去爬取最新的文章数据保存在我本地。