首先贴出原文链接: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. java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory

    运行servler报错 java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory 或 java.lan ...

  2. Spring NoSuchBeanDefinitionException六大原因总结

    1. Overview In this article, we are discussing the Springorg.springframework.beans.factory.NoSuchBea ...

  3. Selenium如何在谷歌浏览器模拟H5页面

    一.基于java语言(转载:http://www.mamicode.com/info-detail-1972340.html) public class runtest { WebDriver dri ...

  4. map的循环删除操作

    1.错误示例 Map<String,InterfaceOutParam> outCodes1 = outParamList.stream().collect(Collectors.toMa ...

  5. linux——常用命令清单

    目录 文件目录相关命令 压缩命令 关机重启命令 挂载命令 用户登录查看命令 搜索命令的命令 本文整理了学习过程中linux的一些常用操作命令,方便以后查阅.学习的课程是Linux达人养成计划 I. 文 ...

  6. composer修改成国内镜像

    因为composer安装包数据是从github.com上下载的,安装包的元数据从packagist.org上下载 作为两个国外的网站,连接速度会很慢,而且很有可能网站被墙. 所以composer中国全 ...

  7. js中字符串和正则相关的方法

    正则表达式对象常用方法 test() 检索字符串中指定的值.返回 true 或 false. var str="Embrace You" var r1=/you/i.test(st ...

  8. CKEditor富文本编辑器

    CKEditor 富文本即具备丰富样式格式的文本.在运营后台,运营人员需要录入课程的相关描述,可以是包含了HTML语法格式的字符串.为了快速简单的让用户能够在页面中编辑带格式的文本,我们引入富文本编辑 ...

  9. sublim 配置 用户默认绑定的格式化文本快捷键

      //在绑定用户绑定配置中 加入 激活每个字母提示! "auto_complete": true,"auto_match_enabled": true, &q ...

  10. 设计图与html 对比

    简易打开旧版火狐  网页版火狐添加组件 新版有时也会没有    谷歌是腾讯的