课堂上简单的html dom空间

时间:2013-05-05 08:39:27

标签: php simple-html-dom

以下课程我想用简单的html dom

来引用

但是有2个班级

class="price"

另一个似乎是class=" price"

使用此代码似乎找不到它

foreach ($html1->find('[class= price ]/text()',0) as $price_data2)

相关网页的来源是

http://www.amazon.com/Likeable-Social-Media-Irresistible-ebook/dp/B00511ONPG/ref=tmm_kin_title_0?ie=UTF8&qid=1367741120&sr=8-1

2 个答案:

答案 0 :(得分:0)

DOMDocument逐字查询类属性值的示例(周围有空格):

// configuration
libxml_use_internal_errors(true);

// input
$url = 'http://www.amazon.com/Likeable-Social-Media-Irresistible-ebook/dp/B00511ONPG/ref=tmm_kin_title_0?ie=UTF8&qid=1367741120&sr=8-1';

// processing
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
$xpath = new DOMXPath($doc);
$prices  = $xpath->query("//*[@class=' price ']/text()");

// output
foreach($prices as $index => $price) {
    printf("%d: %s\n", $index, trim($price->textContent));
}

输出:

0: $14.81
1: $18.38
2: $11.58
3: --
4: 
5: 

请注意,您提供的网址包含无效的HTML。因此,简单解析器可能会与提供的数据产生不同的结果(或根本不起作用)。对于我在这里使用的DOMDocument对象同样如此,但是,它建立在非常稳定的libxml库之上(不仅用在PHP世界中,而且在很多其他世界中也是如此)它也是具有recovery属性,允许进一步控制。

答案 1 :(得分:0)

你应该可以使用:

$html->find('*[class*=price]/text()')

我不喜欢那个/text(),因为它不是真正的CSS。

另请注意,在使用,0进行迭代时,您需要忽略foreach