通过Parsing无法获取图片网址

时间:2014-01-15 19:26:11

标签: php html parsing xpath

我正在构建一个脚本,通过从网站列表中解析html来为我提供产品数组。

我相信我做的一切都正确..但由于某种原因,我只有一个网站Makita.ca有很多困难

所以..我使用DOMXPath来检索元素。我正在提供来自makita.ca的RAW html

我想要的图片是左边图片上的图片

请注意,我唯一需要的是图像的链接而不是实际的链接 图像。

下面的图片页面位于http://www.makita.ca/index2.php?event=tool&id=100 enter image description here

    $productArray = array();
    $Dom = new DOMDocument();
    @$Dom -> loadHTML($this->html);
    $xpath = new DOMXPath($Dom);
    echo $xpath -> query('//*[@id="content_other"]/table[2]/tbody/tr/td[1]/table/tbody/tr[4]/td/table/tbody/tr[1]/td/div/a/img')->length;
        if($xpath -> query('//*[@id="content_other"]/table[2]/tbody/tr/td[1]/table/tbody/tr[4]/td/table')->length > 0)
        {
            for($i=0;$i<$xpath->query('//*[@id="content_other"]/table[2]/tbody/tr/td[1]/table/tbody/tr[4]/td/table/tbody/tr')->length;$i++)
            {
                if($xpath->query('//*[@id="content_other"]/table[2]/tr/td[1]/table/tr[4]/td/table/tr['.$i.']/td/div/a/img') > 0)
                    $productArray['picture'][] = $xpath -> query('//*[@id="content_other"]/table[2]/tr/td[1]/table/tr[4]/td/table/tr['.$i.']/td/div/a/img')->item(0)->nodeValue;
            }
        }

你看到我的错误是什么?从现在开始我真的输了。

编辑:

确定用于测试目的我回应查询()方法的长度女巫应该给我多少元素匹配查询

所以我重新输入了查询,这样他们就不会有任何非asci字符了 所以我重新输入了洞查询'// * [@ id =“content_other”] / table [2] // tr / td 1 / table // tr [4] / td / table // tr {{ 3}} / TD / DIV /一个/ IMG” 然后结果是0

所以我按部分删除了查询的结尾..

//*[@id="content_other"]/table[2]//tr/td[1]/table//tr[4]/td/table//tr[1]/td/div‌​/a = 0
//*[@id="content_other"]/table[2]//tr/td[1]/table//tr[4]/td/table//tr[1]/td/div‌​ = 0
//*[@id="content_other"]/table[2]//tr/td[1]/table//tr[4]/td/table//tr[1]/td = 0
//*[@id="content_other"]/table[2]//tr/td[1]/table//tr[4]/td/table//tr[1] = 0
//*[@id="content_other"]/table[2]//tr/td[1]/table//tr[4]/td/table = 0
//*[@id="content_other"]/table[2]//tr/td[1]/table//tr[4]/td = 0
//*[@id="content_other"]/table[2]//tr/td[1]/table//tr = 5

哇我在这里有一些元素匹配! 好吧,试试最后一个元素女巫是我需要的那个 所以因为它是零基础然后得到tr数字5我需要输入作为路径这

//*[@id="content_other"]/table[2]//tr/td[1]/table//tr[4]

但我仍然得到0 ....所以我不知道该怎么做..

1 个答案:

答案 0 :(得分:0)

//div[@class='product_heading']/ancestor-or-self::table[1]//a/img首先选择“动作镜头”,然后选择在此群下找到的所有图像。

这个XPath表达式比你的表达式更可靠,因为位置表达式的数量很少,随着标记的改变,这些表达式很容易破裂。

//div[@class='product_heading']/ancestor-or-self::table[1]//a[@rel='thumbnail']/img将是一个更强大的安全