有3个li标签,其跨度标题类长度,宽度和高度如下:
<li style="padding-left: 20px">
<span class="title">Length:</span>
<span class="value">1.5</span>
</li>
<li style="padding-left: 20px">
<span class="title">Width:</span>
<span class="value">2.5</span>
</li>
<li style="padding-left: 20px">
<span class="title">Height:</span>
<span class="value">3.5</span>
</li>
我想在3个单独的变量中提取类值,例如 $ length = 1.5,$ width = 2.5,$ height = 3.5并插入我的数据库中的3个单独的列
目前我正在编写如下代码:
$length = (preg_match('#<span class="title">\s*Length:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
$width = (preg_match('#<span class="title">\s*Width:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
$height = (preg_match('#<span class="title">\s*Height:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
但我遇到的问题是所有3个值都插入第一列。在这方面,有谁能帮助我。
我正在添加部分代码:
if (!preg_match_all('#<div class="product-show">(.*?)</li>#s', $content, $m)) break;
foreach ($m[1] as $prod) {
$length = (preg_match('#<span class="title">\s*Length:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
$width = (preg_match('#<span class="title">\s*Width:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
$height = (preg_match('#<span class="title">\s*Height:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
$size = (preg_match('#<strong>\s*Size:\s*</strong></span>\s*<span class="value">\s*<strong>\s*(.*?)\s*</strong>#si', $prod, $m)) ? $m[1] : '';
$sku = (preg_match('#<span class="title">\s*<strong>\s*SKU:\s*</strong>\s*</span>\s*<span class="value">\s*<strong>\s*(.*?)\s*</strong>#si', $prod, $m)) ? $m[1] : '';
$prod_url = (preg_match('#<h2 class="product-name"><a href="([^"]*?)"#si', $prod, $m)) ? $m[1] : '';
$img = (preg_match('#<img[^>]*?data-src="([^"]*?)"#si', $prod, $m)) ? $m[1] : '';
scrape_product($prod_url, $img, $cat, $sku, $size, $length, $width, $height);
$done++;
}
除了长度,宽度和高度之外,每件事情都有效
答案 0 :(得分:0)
使用DOMDocument
和XPath
表达式可能会更好,而不是尝试使用在解析html方面非常糟糕的正则表达式。考虑这样的事情:
$dom=new DOMDocument;
$dom->loadHTML( $strhtml );
$xp=new DOMXPath( $dom );
$col=$xp->query('li span[ @class="value" ]');
if( !empty( $col ) ){
foreach( $col as $node )echo $node->nodeValue;
}