- 我去了数据库,创建了一个url数组
- 然后我遍历数组并使用xpath告诉我每个url有多少链接
- 这就是我头疼的地方
我对每个url中的对象数量进行了计数。因此,我现在尝试收集第2部分中的每个节点值。
我显然做错了什么,但需要一些指导,请
$items = array();
$query = "SELECT * FROM `urls`";
if( $result = mysqli_query($sql,$query));
{
// Return the number of rows in result set
$rowcount=mysqli_num_rows($result);
while ($row = $result->fetch_assoc()) {
$items[] = $row;
}
}
echo '<pre>';
print_r($items);
// $product = array();
echo $rowcount;
for ($x=0; $x<$rowcount; $x++){
$scrapeurl[$x] = $items[$x][url];
echo $scrapeurl[$x];
$xpath[$x] = new XPATH($scrapeurl[$x]);
$urls[$x] = $xpath[$x]->query("//div[@class='infodata']/strong/a[contains(@id,'test_title')]/@href");
$count[$x] = $urls[$x]->length;
$data = array();
for ($i=0; $i<$count[$x]; $i++){
$data[$i]['url'] = $urls[$x]->item($i)->nodeValue;
$data[] = $data[$i]['url'];
}
echo '<pre>';
print_r($data);
道歉有点晚,但解决了问题。也许太累了,但归根结底还是有几个问题。
-
不要总是相信浏览器在HTML中呈现的内容。看看来源!我发现tbody作为一个例子被Firefox填充到HTML中——至少在现实中,源代码是不同的,所以我永远不会找到正确的节点。
-
循环中的循环——记住在循环中的时候,有时你必须再次循环才能深入到正确的结果。。。。。。
$data = array(); foreach($urls as $node){ foreach($node->childNodes as $child) { $data[] = array($child->nodeName => $child->nodeValue); } } $data = new RecursiveIteratorIterator(new RecursiveArrayIterator($data)); $data = iterator_to_array($data,false);