我想从另一个网站打开一个页面,并提取此页面中的div of class="layout-2-2"中的所有链接(href)。如何使用PHP完成此操作?
我想复制this网页布局-2-2中的每个链接。
以下是我的实际代码
$doc = file_get_contents('https://url/');
$xpath = new DOMXpath($doc);
$liens1= $xpath->query('//div[@class="layout-2-2"]');
$links = [];
foreach($liens1 as $lien1) {
$arr = $lien1->getElementsByTagName("a");
foreach($arr as $item) {
$href = $item->getAttribute("href");
$text = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
$links[] = $href;
}
}
echo($links);发布于 2019-03-01 16:43:44
使用xpath query://div[@class=\"layout-2-2\"]//a/@href获取父节点、子节点和子节点属性。
$html = file_get_contents('https://url/');
$links = [];
$document = new DOMDocument;
$document ->loadHTML($html);
$xPath = new DOMXPath($document );
$anchorTags = $xPath->evaluate("//div[@class=\"layout-2-2\"]//a/@href");
foreach ($anchorTags as $anchorTag) {
$links[] = $anchorTag->nodeValue;
}
print_r($links);发布于 2019-03-01 16:45:39
您可以使用简单的foreach来获取特定div标记内的所有链接
//find all a tags that have a href in the div abcde
$hrefDetails = $html->find('div[@class="layout-1-1"]', 0);
$linkArray = array();
foreach($hrefDetails->find('a[href]') as $link){
array_push($linkArray, $link);
}
//print result here
echo "<pre>";
print_r($linkArray);
echo "</pre>";发布于 2019-03-01 16:39:41
代码看起来很好,但我猜您遇到的是它不能工作的问题。
如果是这样的话,这可能与以下事实有关:现在的内容不是存储在登录页面中(您正在抓取的),而是随后由页面通过JavaScript AJAX调用请求的。因此不会被简单的file_get_contents()捕获。
这有点像你从毒贩那里买毒品,他可能在买毒品的时候没有带着毒品,而是在你给他钱给他带货后打电话给另一个人。因此,抢劫毒贩,可能不会产生你想要的结果。
正如您正在尝试做的那样,Web抓取是一门艺术,您最好使用现成的包,而不是试图自己重新发明轮子。即使这样,许多网站也会保护自己免受链接盗窃的攻击。
https://stackoverflow.com/questions/54940750
复制相似问题