我正在尝试使用PHP Curl和Xpath提取2个元素!
到目前为止,元素在foreach
中是分开的,但我想让它们同时出现:
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$elements = $xpath->evaluate("//p[@class='row']/a/@href");
//$elements = $xpath->query("//p[@class='row']/a");
foreach ($elements as $element) {
$url = $element->nodeValue;
//$title = $element->nodeValue;
}
当我把foreach
中的每一个都echo
时,我只得到一个元素,当它在foreach
中回响时,我得到所有的元素。
我的问题是如何同时获得它们(url和title)以及使用pdo将它们添加到myqsl中的最佳方法。
thank you
在本例中不需要两次使用XPath。您可以执行一个查询,然后导航到关联的其他节点。
例如,找到您感兴趣的所有href
,并获得它们的ownerElement
(<a>
)节点值。
$hrefs = $xpath->query("//p[@class='row']/a/@href");
foreach ($hrefs as $href) {
$url = $href->value;
$title = $href->ownerElement->nodeValue;
// Insert into db here
}
或者,找到您感兴趣的所有<a>
,并获得它们的href
属性。
$anchors = $xpath->query("//p[@class='row']/a[@href]");
foreach ($anchors as $anchor) {
$url = $anchor->getAttribute("href");
$title = $anchor->nodeValue;
// Insert into db here
}
每次迭代都覆盖$url
。也许可以使用数组?
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$elements = $xpath->evaluate("//p[@class='row']/a/@href");
//$elements = $xpath->query("//p[@class='row']/a");
$urls = array();
foreach ($elements as $element){
array_push($urls, $element->nodeValue);
//$title = $element->nodeValue;
}