【问题标题】:php curl/xpath data based off < p> text information?php curl/xpath 数据基于 <p> 文本信息?
【发布时间】:2017-06-12 01:51:04
【问题描述】:

我知道如何使用下面的代码通过 div id、class 等标签来 xpath 和回显另一个网站的文本。但是,我不知道如何在更精确的条件下执行此操作,例如在尝试抓取和回显一些没有唯一标签标识符(如 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。是否可以通过在

中标识一个永不改变的关键字来提取这些数据,例如“DJIA all time”。

<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 所有时间']";

这可能吗?

我还想知道是否使用像 $query = "//p[='DJIA']"; 这样的循环? 可以工作,虽然我不知道如何准确地使用它。 谢谢!!

【问题讨论】:

    标签: php xpath


    【解决方案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() 是节点的值,第二种查找具体的类定义。

    【讨论】:

    • 太棒了,这行得通。能够插入不同的单词,它给了我数据,很棒的东西!
    【解决方案2】:

    尝试使用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"]
    

    【讨论】:

    • 欣赏答案,您知道如何使用我拥有的现有代码进行操作吗?对 php 来说很新,试图正确放置它,但还没有运气。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多