php获取python脚本,php怎么调用python脚本?

本文探讨了如何在PHP中通过exec()和system()函数调用Python脚本,以实现AJAX请求中的异步数据处理。作者详细介绍了这两个函数的区别,并展示了在实际项目中的使用示例,以及如何利用Python爬虫抓取并显示数据到网页。
摘要由CSDN通过智能技术生成

c7af8da291c7db4deae54cbec0542821.png

php调用python脚本

起初是为了实现一个小需求,想要在JQuery执行的AJAX异步请求时在服务器端调用执行Python脚本。而Windows服务器端部署的WEB环境是Apache+PHP,在AJAX异步请求时根本不能直接调用Python脚本。

因为web开发语言是php而非Python的Django和Flask等开发框架。AJAX是可以调用执行服务器端的脚本文件,但它的本质仍是HTTP的请求。

所以就只能在HTTP请求中想办法调用Python脚本,也就在PHP程序中调用执行python脚本。

这里就要用到PHP的内置函数exec() 和system() ;

PHP的exec() 和system() 函数区别:

(1)system()

原型:string system (string command [, int return_var])

system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。

(2)exec()

原型:string exec (string command [, string array [, int return_var]])

exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。

可以看出两个函数的区别就是PHP在调用执行外部命令后,system()函数将执行的结果输出并返回给PHP程序。而 exec() 函数在调用执行外部命令后不会将结果输出,只是返回结果。

程序代码实现和对比:

(1)in.php程序使用exec()函数代码及解析:

326d742963e049eb1a497e4e34d09922.png

(2)test.py程序代码:

2bfaedcfd776a89e49790d17549be171.png

(3)PHP程序执行后效果1:

076cc8c82f1f98dcc04a031d7d065e33.png

这样就利用exec()函数实现了对python脚本的调用,下面说一下将in.php程序中的exec()函数替换成system()函数后的执行效果。

(4)in.php程序使用system()函数代码及解析:

572aa270a27407ba45bea34255fd6671.png

(5)PHP程序执行后效果2:

c9f32adc03d94d125ae262d024fe5d2a.png

可以看出使用system()函数时,执行python程序时不但返回结果,而且将结果输出了,而exec()函数只是返回结果,没有输出。

扩展应用:(php web开发数据调用)

想要在网页上显示其它网站上的数据内容时,都需要网站提供数据的调用接口直接调用,如果没有接口,就需要用爬虫将数据爬回来后保存到数据库,在用程序从数据库中取出数据展示出来。(当然也可以用到php的curl库进行数据爬取后进行展示,但是个人认为在编程语言中做爬虫最简单并且强大的还是Python),而如果在PHP程序中直接调用python脚本进行爬虫,然后再将数据展示到网页上,这样就可以省去插入数据到数据库和从数据库读取数据的过程,这种做法对一些实时数据的爬取还是比较有用的,但是一定会影响网页的加载速度。下面将以前写的一个爬虫爬到的数据直接展示到web网页上供大家参考。

(1)php程序代码:<?PHP

$output=exec('python test1.py');

echo $output;

?>

(2)python爬虫代码:import requests

import json

class WeatherSpider(object):

def __inti__(self):

pass

def request(self,url):

headers = {

'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',

'Referer': 'http://www.weather.com.cn/weather40d/101060201.shtml'

}

return requests.get(url,headers=headers)

def create_url(self):

year = '2016'

for i in range(1,2):

month = str(i) if i > 9 else "0" + str(i)

url = "http://d1.weather.com.cn/calendar_new/" + year + "/101060201_" + year + month + ".html"

self.get_data(url)

def get_data(self,url):

respone = self.request(url).content

json_str = respone.decode(encoding='utf-8')[11:]

weathers = json.loads(json_str)

data = ""

for weather in weathers:

data = data+weather.get('date')+'星期'+weather.get('wk')+weather.get('hmax')+weather.get('hmin')+weather.get('hgl')+"
"

print (data)

if __name__ == '__main__':

jl_weather = WeatherSpider()

jl_weather.create_url()

(3)web网页爬虫展示:

974c4ef878790f6841d2299b90a68489.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值