我想从html中提取一些汽车制造数据。这是我要获取此信息的html数据。
我尝试了此代码,但是没有用
<?php
$data = "<select id="c1:swfield" name="c1">
<option value="--">> All Makes</option>
<option value="1167">Acura</option>
<option value="1173">Alfa Romeo</option>
<option value="1564">Smart</option>
<option value="1836">Speranza</option>
<option value="1566">Ssang Yong</option>
</select>";
preg_match_all('|<select id=\"c1:swfield\" name=\"c1\">(.*?)</select>|s', $data, $matches);
print_r($matches);
?>
我正在获取一些空数组作为输出。
在这种情况下使用适当的DOM解析器有很多优点,包括知道要提取什么数据。
此代码使用DOMDocument和loadHTML()
加载数据,然后使用XPath提取数据。
XPath可能很难开始,它使用//select[@id="c1:swfield"]/option
分解为...
//select
-选择任何<select>
元素。[@id="c1:swfield"]
,其id属性为c1:swfield
。这样可以指定从哪个<select>
标签中提取数据。/option
-在其中-提取<option>
元素。这就是该代码的工作方式...
$dom = new DOMDocument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xp = new DOMXPath($dom);
$makes = $xp->query('//select[@id="c1:swfield"]/option');
$makeList = [];
foreach ( $makes as $make ) {
$makeList[] = $make->textContent;
}
print_r($makeList);
并给出(带有示例数据)...
Array
(
[0] => > All Makes
[1] => Acura
[2] => Alfa Romeo
[3] => Smart
[4] => Speranza
[5] => Ssang Yong
)
您没有正确使用引号,请尝试使用以下代码
<?php
$data = '<select id="c1:swfield" name="c1">
<option value="--">> All Makes</option>
<option>Acura</option>
<option>Alfa Romeo</option>
<option>Smart</option>
<option>Speranza</option>
<option>Ssang Yong</option>
</select>';
preg_match_all('|<select id=\"c1:swfield\" name=\"c1\">(.*?)</select>|s', $data, $matches);
print_r($matches);
?>
为了获得选项标签之间的值,您可以使用:
preg_match_all('|(?:<select id=\"c1:swfield\" name=\"c1\">.*?)?<option value=\"\d*?\">(.*?)<\/option>(?:<\/select>)?|s', $data, $matches);
Here是如何工作的。