使用Php爬行选项标记

时间:2014-02-05 17:05:28

标签: php web-crawler

我尝试了很多东西,但我无法读取标签上的值。 我在这里以及不同的博客上看到类似的例子,但是那里的解决方案并没有解决我的问题。

Html在网站上是这样的:

<div>
   <select name="ctl00$ContentPlaceHolder1$ddlCityID" id="ddlCityID">
    <option value="">Choose</option>
        <option value="14">Roma</option>
        <option value="15">Milan</option>
        <option value="16">Inter</option>
   </select>
</div>

关于php的代码:

$pageTitle = 'select[@id="ddlCityID"]';
$html = file_get_html($url);

  if ($html != null )
  {
     foreach($html->find($pageTitle) as $element) 
     {
    $link = $element->find('option');
    callfunction($link[0]->option);
     }
  }

错误:

Notice: Undefined offset: 0 in C:\Aptana Studio 3 = a.php on line 57
Notice: Trying to get property of non-object in C:\Aptana Studio 3 = a.php on line 57

我的问题在哪里,我如何获得标签的价值以及标签中的文字。

感谢;

1 个答案:

答案 0 :(得分:0)

继续使用simplehtmldom而不是str_pos(但我建议更改解析器,因为simplehtmldom很重)。

您正在寻求的解决方案是

include('simple_html_dom.php');

$str = '<div>
   <select name="ctl00$ContentPlaceHolder1$ddlCityID" id="ddlCityID">
    <option value="">Choose</option>
        <option value="14">Roma</option>
        <option value="15">Milan</option>
        <option value="16">Inter</option>
   </select>
</div>';

$pageTitle = 'select[id=ddlCityID]';
$html = str_get_html($str);

if ($html != null ) {
    foreach($html->find($pageTitle) as $element) {
        foreach($element->find('option') as $trueElement) {
            echo $trueElement->innertext;
        }
    }
}

请注意,innertext会给你'选择','罗马','米兰','国际米兰'。 trueElement现在包含每个OPTION标记。

'id'之前的'@'也没用。

更新:这是我测试的完整工作代码。