我正试图从其他网站获得一些汇率,我正在登录并使用file_get_contents获取所有数据,这就是我使用的:
<?php
$username = 'myusername@gmail.com';
$password = 'mypassword';
$url = 'http://website-i-get-content-from.com';
$context = stream_context_create(array(
'http' => array(
'header' => "Authorization: Basic " . base64_encode("$username:$password")
)
));
$data = file_get_contents($url, false, $context)
?>
现在我只需要该网站的某些部分:EUR CHF和GBP的汇率,在源代码中看起来像这样:
<tr><td>EUR</td><td align=right>USD 0.599</td><td align=right>USD 0.599</td></tr>
<tr><td>CHF</td><td align=right>USD 0.470</td><td align=right>USD 0.470</td></tr>
<tr><td>GBP</td><td align=right>USD 0.675</td><td align=right>USD 0.675</td></tr>
所以我现在需要的数字是0.599,0.470和0.675。他们的确发生了明显
如何将它们放入变量?
答案 0 :(得分:3)
听起来你需要一个解析器。我过去曾使用simpledom parser。我发现它很简单。
include("simplehtmldom/simple_html_dom.php");
$data="<html>
<body>
<table class=\"foo\">
<tr><td>EUR</td><td align=right>USD 0.599</td><td align=right>USD
0.599</td></tr>
<tr><td>CHF</td><td align=right>USD 0.470</td><td align=right>USD
0.470</td></tr>
<tr><td>GBP</td><td align=right>USD 0.675</td><td align=right>USD
0.675</td></tr>
</table>
</body>
</html>";
$html = new simple_html_dom();
$html->load($data);
foreach($html->find('table.foo tr') as $row) {
$cells = $row->find('td');
if (count($cells) >= 3) {
$abbr=$cells[0]->innertext; // EUR, CHF etc
$value1=$cells[1]->innertext; // USD 0.599 etc
$value2=$cells[2]->innertext; // USD 0.599 etc
echo "$abbr $value1 $value2\n";
}
}
答案 1 :(得分:0)
正则表达式可以。
preg_match_all("'(EUR|CHF|GBP)(?=<).+USD(?<=>)\s+([\d.]+)(?=<)'", file_get_contents('...'), $matches));
我没有测试它。
我知道解析HTML的问题很糟糕但是这里并没有解析它。