【发布时间】:2018-11-07 01:10:36
【问题描述】:
我有三个 URL,这些 URL 包含我想要的数据。但是每个数据中的html标签不同。所以这就是为什么我不能为所有人提供相同的 Xpath。我需要尝试“如果在这个 Xpath 中找不到它,那么试试这个。”像一种方式。但我对如何做到这一点有点困惑?
例如,这些是链接$linkBox:
array(3) {
[0]=>
string(34) "https://lions-mansion.jp/MF161026/"
[1]=>
string(34) "https://lions-mansion.jp/MF171045/"
[2]=>
string(34) "https://lions-mansion.jp/MF171010/"
}
我将一一进入这些链接。而对于第一个。我给 Xpath:
$get = [];
foreach ($linkBox as $box){
$content = pageContent($box);
$Pars = new \DOMXPath($content);
$Route = $Pars->query("//ul[@id='snav']/li/a");
foreach ($Route as $Rot){
$get = $Rot->getAttribute('href');
}
}
但是 Xpath 不适合第二个或第三个。因此,如果使用 if 语句,如果它为空,我该如何编写试试这个?像代码?我能做到吗?还是我需要使用其他方式?
第二个Box的Xpath是:
$Route = $Pars->query("//nav[@id='siteActionNav']ul/li/a");
第二个Box的Xpath是:
$Route = $Pars->query("//ul[@id='subNavi']/li[2]/a");
【问题讨论】:
-
你能不能让你的数组更详细一点,让它同时包含 URL 和 XPath 表达式?
$linkBox = [['url' => 'https://lions-mansion.jp/MF161026/', 'query' => '//ul[@id='snav']/li/a'], ...] -
我不能,我想。原因是我正在刮擦。不是自己做的。已经刮掉了网址。 @菲尔
-
对,这是有道理的。每个查询的结果(您的
$Route变量)将具有length属性($Route->length)。如果那是0,那么您的查询不匹配任何元素。你能用它来确定是否运行更多查询吗? -
好吧,我有点卡在这里,我无法正确插入长度
if ($Route->length > 0) { foreach ($Route as $Rot) { $get = $Rot->getAttribute('href');你能把它作为示例答案伙伴吗? @菲尔
标签: php web-scraping