首先贴出原文链接:https://jingyan.baidu.com/article/922554465bf115851748f45f.html

方法如下:

function getRate($from, $to, $amount){
$data = file_get_contents("http://www.baidu.com/s?wd={$from}%20{$to}&rsv_spt={$amount}");preg_match("/<div>1\D*=(\d*\.\d*)\D*<\/div>/",$data, $converted);
$converted = preg_replace("/[^0-9.]/", "", $converted[1]);
return number_format(round($converted, 3), 3);
}

刚开始我还真以为是百度给的汇率接口,结果我把$data直接打印出来才发现这是抓取的页面内容,不过确实能用,感觉这种方式很多东西都可以获取到了,但是不知道会有什么风险。

如果想获得更为准确和及时的汇率信息,当然只能去中国银行的官网去获得了。http://www.boc.cn/sourcedb/whpj/

(不知道是否有实时的免费的汇率接口,反正我这里没有找到,如果有哪位读者找到了,麻烦分享一下)

此处以获得欧元汇率为例:

1.我们先去分析一下页面的接口(右键->查看源代码)得到该页面的代码。

因为我们打开网页的时候并不是我们想要的内容,通常搜索结果都会是异步获取的,我们需要找到它异步获取数据的方式

由此我们可以看出,由此我们可以得到他的搜索结果的获取地址:http://srh.bankofchina.com/search/whpj/search.jsp?erectDate=2017-11-13&nothing=2017-11-13&pjname=1326&page=1

那么我们就可以传递对应参数拉取到对应页面

$pageCode = file_get_contents("http://srh.bankofchina.com/search/whpj/search.jsp?erectDate=2017-11-13&nothing=2017-11-13&pjname=1326&page=1");

2.截取我们需要的内容这里就稍微得用到正则表达式了。

分析一下我们需要的数据是个什么结构

这是原始的 源代码,,我将其 空格 换行 制表符等全部删掉,然后开始匹配 (由于我技术有限所已并不能一次性很完美的解析出内容一下是我粗暴的做法)

$data = str_replace(array(" ","\r","\n","\t"), "",$pageCode);
  preg_match('/<tr>[\s]*<td>欧元<\/td>[\s]*<td>[\s|\S]*<\/td>[\s]*<\/tr>/',$data, $converted);//这里其实可以一次性匹配解析出想要的数据,只是需要好好熟悉一下正则,
  $data = str_replace("</tr><tr>", ";", $converted[0]);
  $data = str_replace(array("<tr>","</tr>"), "", $data);
  $data = str_replace("</td><td>", ",", $data);
  $data = str_replace(array("<td>","</td>"), "", $data);
  $rateList = explode(";", $data);
  $rate = explode(",", $rateList[0]);

整理为方法如下:

function getEurRate(){
$date = date("Y-m-d", time());
//获得页面代码
$data = file_get_contents("http://srh.bankofchina.com/search/whpj/search.jsp?erectDate=".$date."&nothing=".$date."&pjname=1326&page=1");
//去掉非字符
$data = str_replace(array(" ","\r","\n","\t"), "", $data);
//得到汇率代码
preg_match('/<tr>[\s]*<td>欧元<\/td>[\s]*<td>[\s|\S]*<\/td>[\s]*<\/tr>/',$data, $converted);
//开始各种调整格式 为了整理为 数组
$data = str_replace("</tr><tr>", ";", $converted[0]);
$data = str_replace(array("<tr>","</tr>"), "", $data);
$data = str_replace("</td><td>", ",", $data);
$data = str_replace(array("<td>","</td>"), "", $data);
$rateList = explode(";", $data);
$rate = explode(",", $rateList[0]);
//$rate [0] 国家 [1] 现汇买入价 [2]现钞买入价[3]现汇卖出价[4]现钞卖出价[5]外管局中间价[6]中行折算价
$rate = $rate[3];
$rate = round(($rate/100),2);
if(is_numeric($rate))return $rate;
else return false;
}

简单粗暴,但是有效。有很多可优化的地方我就不多描述了。

php 获得汇率(解析页面内容获得指定数据)的更多相关文章

  1. Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号

    一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...

  2. PHP curl获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置

    使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的或true. 1.curl获取页面内容, 直接输出例子: <?php $ ...

  3. PHP CURL获取页面内容输出例子

    使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true. 1.curl ...

  4. asp.net将页面内容按需导入Excel,并设置excel样式,下载文件(解决打开格式与扩展名指定的格式不统一的问题)

    //请求一个excel类 Microsoft.Office.Interop.Excel.ApplicationClass excel = null; //创建 Workbook对象 Microsoft ...

  5. [实战演练]python3使用requests模块爬取页面内容

    本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...

  6. LIMS系统仪器数据采集-使用xpdf解析pdf内容

    不同语言解析PDF内容都有各自的库,比如Java的pdfbox,.net的itextsharp. c#解析PDF文本,关键代码可参考: http://www.cnblogs.com/mahongbia ...

  7. python爬虫解析页面数据的三种方式

    re模块 re.S表示匹配单行 re.M表示匹配多行 使用re模块提取图片url,下载所有糗事百科中的图片 普通版 import requests import re import os if not ...

  8. htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容

    Htmlunit是一款模拟浏览抓取页面内容的java框架,具有js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特殊适合于这种非完整页面的站点抓取. 下载地址: https:// ...

  9. nodejs cheerio模块提取html页面内容

    nodejs cheerio模块提取html页面内容 1. nodejs cheerio模块提取html页面内容 1.1. 找到目标元素 1.2. 美化文本输出 1.3. 提取答案文本 1.4. 最终 ...

随机推荐

  1. Docker部署Bytom全节点钱包

    微服务和容器目前比较流行,相信很多小伙伴都比较熟悉docker, 如果你不是太了解,可以查看文档docker学习手册.那如何用docker搭建比原链(Bytom)的节点呢? 在操作之前,请自行安装do ...

  2. laravel框架——Excel导入导出

    一.composer安装PHPExcel插件 1.在框架根目录下安装依赖 composer require "maatwebsite/excel:~2.1.0" 2.打开框架在co ...

  3. JS中for in 与 for of

    // 数组var A=[4,6,74,67]; for in:拿到的是数组下标 for (let i in A){ console.log(i); } //0,1,2,3 for of:拿到的是数组元 ...

  4. cumsum函数

    >>> a = np.array([[1,2,3], [4,5,6]]) >>> a array([[1, 2, 3], [4, 5, 6]]) >>& ...

  5. Spring框架基础

    1         Spring框架 1.1           Spring的基本概念 是一个轻量级的框架,提供基础的开发包,包括消息.web通讯.数据库.大数据.授权.手机应用.session管理 ...

  6. redhat7.2安全基线BI

    (一)   Redhat linux7.2安全基线基本型(BI) 1.   密码复杂度策略 /etc/pam.d/system-auth文件中,增加内容 password requisite pam_ ...

  7. 开源项目Zookeeper、Doozer、etcd进行总结

    Jason Wilder的一篇博客对分别对常见的服务发现开源项目Zookeeper.Doozer.etcd进行了总结介绍: Zookeeper是一个用户维护配置信息.命名.分布式同步以及分组服务的集中 ...

  8. 『TensorFlow』SSD源码学习_其七:损失函数

    Fork版本项目地址:SSD 一.损失函数介绍 SSD损失函数分为两个部分:对应搜索框的位置loss(loc)和类别置信度loss(conf).(搜索框指网络生成的网格) 详细的说明如下: i指代搜索 ...

  9. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)D. Frequency of String

    题意:有一个串s,n个串模式串t,问s的子串中长度最小的包含t k次的长度是多少 题解:把所有t建ac自动机,把s在ac自动机上匹配.保存每个模式串在s中出现的位置.这里由于t两两不同最多只有xsqr ...

  10. vmware 安装 centos7 记录笔记

    1, 安装centos 7, 到阿里云镜像下载centos 7 1.虚拟机的创建: 打开安装好的VMware (如果大家安装的VMware是英文版的也没关系,对号入座即可),选择“文件--->新 ...