我有代码尝试从机器人事件页面here is an example中提取事件SKU。我正在使用的代码在页面上找不到任何SKU。 SKU在411号线上,有一个“product-sku”类的div。我的代码没有事件在页面上找到Div,只是下载所有事件。这是我的代码:
<?php
require('simple_html_dom.php');
$html = new simple_html_dom();
if(!$events)
{
echo mysqli_error($con);
}
while($event = mysqli_fetch_row($events))
{
$htmldown = file_get_html($event[4]);
$html->load($htmldown);
echo "Downloaded";
foreach ($html->find('div[class=product-sku]') as $row) {
$sku = $row->plaintext;
echo $sku;
}
}
?>
任何人都可以帮我修复我的代码吗?
答案 0 :(得分:1)
此代码使用DOMDocument php类。它适用于以下示例HTML。请尝试此代码。
// new dom object
$dom = new DOMDocument();
// HTML string
$html_string = '<html>
<body>
<div class="product-sku1" name="div_name">The this the div content product-sku</div>
<div class="product-sku2" name="div_name">The this the div content product-sku</div>
<div class="product-sku" name="div_name">The this the div content product-sku</div>
</body>
</html>';
//load the html
$html = $dom->loadHTML($html_string);
//discard white space
$dom->preserveWhiteSpace = TRUE;
//the table by its tag name
$divs = $dom->getElementsByTagName('div');
// loop over the all DIVs
foreach ($divs as $div) {
if ($div->hasAttributes()) {
foreach ($div->attributes as $attribute){
if($attribute->name === 'class' && $attribute->value == 'product-sku'){
// Peri DIV class name and content
echo 'DIV Class Name: '.$attribute->value.PHP_EOL;
echo 'DIV Content: '.$div->nodeValue.PHP_EOL;
}
}
}
}
答案 1 :(得分:0)
我会使用正则表达式(正则表达式)来完成拉出skus。
正则表达式:
preg_match('~<div class="product-sku"><b>Event Code:</b>(.*?)</div>~',$html,$matches);
请参阅php regex docs。
新代码:
<?php
if(!$events)
{
echo mysqli_error($con);
}
while($event = mysqli_fetch_row($events))
{
$htmldown = curl_init($event[4]);
curl_setopt($htmldown, CURLOPT_RETURNTRANSFER, true);
$html=curl_exec($htmldown);
curl_close($htmldown)
echo "Downloaded";
preg_match('~<div class="product-sku"><b>Event Code:</b>(.*?)</div>~',$html,$matches);
foreach ($matches as $row) {
echo $row;
}
}
?>
实际上在这种情况下(使用该网页)只有一个sku ...
而不是:
foreach ($matches as $row) {
echo $row;
}
你可以使用:echo $matches[1];
(数组索引1的原因是因为整个正则表达式模式加上sku将在$ matches [0]中,但只有包含sku的子组在$ matches [1]中]。)
答案 2 :(得分:-1)
尝试使用
require('simple_html_dom.php');
$html = new simple_html_dom();
if(!$events)
{
echo mysqli_error($con);
}
while($event = mysqli_fetch_row($events))
{
$htmldown = str_get_html($event[4]);
echo "Downloaded";
foreach ($htmldown->find('div[class=product-sku]') as $row) {
$sku = $row->plaintext;
echo $sku;
}
}
如果“product-sku”类仅适用于div,则可以使用
$htmldown->find('.product-sku')