Получить данные с HTML-страницы с помощью регулярного выражения в PHP - PullRequest
0 голосов
/ 31 декабря 2011

Я пытаюсь получить цену на заданной странице с помощью регулярных выражений, но переменная, которую я использую для хранения извлеченного содержимого, всегда пуста. Может кто-нибудь помочь мне написать правильное регулярное выражение.

Если страница: http://www.flipkart.com/mobiles/memory-cards/itmczcsrtvjeb6nr?pid=acccrrqzzsgnfgea&_l=sXQjsX87GxqrvKzhjuOrkw--&_r=n_2yuAC4xgh0SZTuulvAtw--&ref=af8ad0c4-62a2-4381-99d3-3ad8285e260b

Я хочу получить цену 260 отсюда.

HTML-код страницы для тегов:

<span id="fk-mprod-our-id" class="price final-price our fksk-our">Rs.<span class="small-font"> </span>260</span>

Ответы [ 3 ]

2 голосов
/ 31 декабря 2011

Вы можете написать более пуленепробиваемый парсер, используя simplehtmldom - см. http://simplehtmldom.sourceforge.net/. Для меня это никогда не удавалось проанализировать документ.

В результате вы получите такой код

<?php
include_once '/path/to/simplehtmldom/simple_html_dom.php';
$html = file_get_html('http://www.flipkart.com/mobiles/memory-cards/itmczcsrtvjeb6nr?pid=acccrrqzzsgnfgea&_l=sXQjsX87GxqrvKzhjuOrkw--&_r=n_2yuAC4xgh0SZTuulvAtw--&ref=af8ad0c4-62a2-4381-99d3-3ad8285e260b');
foreach ($html->find('span.final-price') as $element) {
    echo $element->plaintext;
}
//will output "Rs. 260", unless page changes

Более чистый код, хотя это кошмар производительности по сравнению с регулярными выражениями

0 голосов
/ 31 декабря 2011

Предполагая, что валюта может меняться в зависимости от IP / страны, я бы использовал Explode (я не очень хорош в Regex)

//consider that $html contains the page source
$html = explode('<span class="price final-price our fksk-our" id="fk-mprod-our-id">', $html);
$html = explode("</span>', $html[1]);
$price = $html[1];

Надеюсь, это поможет.

0 голосов
/ 31 декабря 2011

Похоже, это единственный раз, когда используется класс final-price, так что это должно работать:

/final-price.+?>(\d+)</
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...