2012-03-13 4 views
0

Я пытаюсь получить некоторые обменные курсы с другого сайта, я войти в систему и захватывая все данные с file_get_contents, это то, что я использую:Использование file_get_contents и использовать определенные части содержания

<?php 
$username = '[email protected]'; 
$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

Возможный дубликат [HTML Scraping in Php] (http://stackoverflow.com/questions/34120/html-scraping-in-php) – GordonM

ответ

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

PHP имеет (DOMDocument) [http://php.net/manual/ ru/book.dom.php], делает то же самое, не нуждаясь в другой библиотеке. – Bradmage

+0

@BradleyForster Выглядит хорошо. Я буду использовать его в своем следующем проекте. – Adam

+0

Адам, я ценю, что вы тратите время на помощь, ваш ответ имеет смысл для меня, хотя сайт, на котором я беру данные, содержит намного больше, чем то, что у вас есть в переменной $ data. Я знаю, что это всего лишь точка отсчета для начала, но не могли бы вы рассказать мне, как я могу извлечь часть, которая у вас есть в переменной $ data, из всего исходного кода страницы? – user990767

0

Регулярное выражение может сделать.

preg_match_all("'(EUR|CHF|GBP)(?=<).+USD(?<=>)\s+([\d.]+)(?=<)'", file_get_contents('...'), $matches));

Я не проверял, хотя.

Я знаю, что это плохой bla bla для анализа HTML, но на самом деле это не синтаксический анализ.

Смежные вопросы