1

我正在尝试从一个网站获取选择列表的值(preg_match)。

网站上的 HTML:

<select name="country_id" id="country_id">
    <option value="vi">Vietnam</option>
    <option value="en">English</option>
    <option value="fr">France</option>
</select>

我尝试了下一个代码,但没有成功:

<?php

    $ch = curl_init();

    $url = "<url_of_website>"; 

    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec($ch);

    preg_match_all('/<select name="country_id" id="country_id">(.*)<\/select>/msu', $result, $matches);
    print_r($matches);

    curl_close ($ch);

?>

我想得到如下结果:vi、en、fr

谁能帮帮我吗?

谢谢你。

4

2 回答 2

2

解析你想要的 DOM 看起来像这样

假设此 HTML 在您请求的页面中

<select name="country_id" id="country_id">
    <option value="vi">Vietnam</option>
    <option value="en">English</option>
    <option value="fr">France</option>
</select>

这个 PHP 将找到option元素的值

<?php

$doc = new DOMDocument();
$doc->loadHTMLFile('<url_of_website>');
$xpath = new DOMXPath($doc);

$options = $xpath->query('*/select[@id="country_id"]/option');

$values = array();
foreach ($options as $option) {
    $values[] = $option->getAttribute('value');
}

print_r($values);

编辑以显示如何从 URL 解析 DOM,而不是变量中的某些 HTML

于 2013-06-06T15:09:37.423 回答
1

您可以使用 DOMDocument:

$html = <<<LOD
<select name="country_id" id="country_id">
    <option value="vi">Vietnam</option>
    <option value="en">English</option>
    <option value="fr">France</option>
</select>
LOD;

$doc = new DOMDocument();
@$doc->loadHTML($html);
$optionNodes = $doc->getElementById('country_id')->getElementsByTagName('option');
foreach($optionNodes as $optionNode) {
    echo $optionNode->getAttribute('value') . '<br/>';
}
于 2013-06-06T15:13:56.700 回答