我知道如何使用以下代码通过div id,class等标签从另一个网站发送xpath和echo文本。但是,我不知道如何在更精确的条件下执行此操作,例如在尝试刮擦并回显一些没有像div这样的唯一标记标识符的文本时。 下面的代码吐出了数据。
$doc = new DOMDocument;
// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;
// Most HTML Developers are chimps and produce invalid markup...
$doc->strictErrorChecking = false;
$doc->recover = true;
$doc->loadHTMLFile('http://www.nbcnews.com/business');
$xpath = new DOMXPath($doc);
$query = "//div[@class='market']";
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo trim($entry->textContent); // use `trim` to eliminate spaces
}
在下面的示例源代码中,我想拉取值“21,271.97”。但是没有唯一的标签,没有div id。是否可以通过在<中识别关键字来提取此数据? p为H.永远不会改变,例如“DJIA所有时间”。
<p>DJIA All Time, Record-High Close: <font color="#0000FF">June 9,
2017</font>
(<font color="#FF0000"><b bgcolor="#FFFFCC"><font face="Verdana, Arial,
Helvetica, sans-serif" size="2">21,271.97</font></b></font>)</p>
想知道我是否可以用$ query =“// div [@ class ='market']”的行代替它; $ query =“// p ['DJIA all time']”;
这可能吗?
我也想知道是否使用类似$ query =“// p [='DJIA']”的东西的循环;?? 可以工作,虽然我不知道如何使用它。 谢谢!
答案 0 :(得分:1)
尝试使用以下XPath
表达式:
//p[contains(text(), "DJIA All Time")]//b/font
考虑提供的链接(http://www.nbcnews.com/business),您可以使用
获取所需的文字//span[text()="DJIA"]/following-sibling::span[@class="market_item market_price"]
答案 1 :(得分:1)
与在线XPath测试人员玩游戏会很好 - 我使用https://www.freeformatter.com/xpath-tester.html#ad-output
$query = "//p[contains(text(),'DJIA')]";
虽然如果您使用之后的页面,我发现该值似乎是...的第一条记录。
$query = "//span[contains(@class,'market_price')]";
但两种情况下的想法是相同的,使用contains(source,value)
将匹配一组节点。在第一种情况下,text()是节点的值,第二种是查找特定的类定义。