【问题标题】:Using Simple HTML DOM to extract an 'a' URL使用 Simple HTML DOM 提取“a”URL
【发布时间】:2013-04-16 06:56:51
【问题描述】:

我有这段代码用于从表中抓取团队名称

$url = 'http://fantasy.premierleague.com/my-leagues/303/standings/';
$html = @file_get_html($url);
//Cut out the table
$FullTable = $html->find('table[class=ismStandingsTable]',0);
//get the text from the 3rd cell in the row 
$teamname = $FullTable->find('td',2)->innertext;
echo $teamname;

这很有效......并给出了这个输出......

<a href="/entry/110291/event-history/33/">Why Always Me?</a>

但是当我添加这些行时..

$teamdetails = $teamname->find('a')->href;
echo $teamdetails;

我得到完全空白的输出。

知道为什么吗?我试图将/entry/110291/event-history/33/ 作为一个变量,将Why Always Me? 作为另一个变量。

【问题讨论】:

  • 您检查了$teamdetails 吗?当您分配 $FullTable-&gt;find('td',2)-&gt;innertext 的值时,它可能不再是一个对象,而是一个简单的字符串。在这种情况下,你应该做一个 preg_match 来提取你的href。还有什么包含$teamname .?
  • 谢谢.. 我刚刚得到这个工作。我不完全确定为什么,但我无法 -> 在 $teamname 中找到东西,所以我只是做了 $teamname = $FullTable-&gt;find('td',2)-&gt;find('a',0)-&gt;href;$teamname = $FullTable-&gt;find('td',2)-&gt;find('a',0)-&gt;innertext;,它给出了我需要的值。
  • Enable PHP error logging。当你得到一个空白页时,错误日志就会包含原因。
  • @M8R-1jmw5r 谢谢 - 我会看看

标签: php simple-html-dom


【解决方案1】:

改为这样做:

$tdhtml = DOMDocument::loadHTML($teamdetails);
$link = $tdhtml->getElementsByTagName('a');

$url = $link->item(0)->attributes->getNamedItem('href')->nodeValue;

【讨论】:

    【解决方案2】:
    $teamdetails = $teamname->find('a')->href;
                   ^^^^^^^^^---- never defined in your code
    

    我也看不出您的“工作”代码可能如何工作。你也没有在那里定义$teamname,所以你永远不会得到一个空/未定义变量的输出,即......没有输出。

    【讨论】:

    • ok.. 我不知道你是如何编写 php 代码的,但在做这样简单的事情时,我几乎不需要定义变量。这不是它不起作用的原因。我在 Windows 主机上。也许 linux 更严格?
    • php 不需要预定义变量,但你说你已经得到了你想要的输出,但是上面提供的代码不可能输出任何东西,因为你正在做@ 987654323@.
    • 我发布的第一段代码确实输出了我需要的信息。后一段代码不起作用,但我已经修复了它,我仍然不需要在我的代码中定义任何东西。
    【解决方案3】:

    Marc B 是对的,我知道您不必初始化变量,但他说您正在尝试访问所述变量的属性:

    $teamdetails = $teamname->find('a')->href;
               ^^^^^^^^^---- never defined in your code
    

    这本质上是:

    $teamname = null;
    $teamname->find('a')->href;
    

    【讨论】:

    • 你和 Marc B 可能是对的,但你真的没有以任何方式帮助我,因为你没有解释我如何解决它,也没有说得到我的方法寻找。我知道你赞成它,但赞成实际上没有回答任何问题的答案是不好的做法。例如 $FullTable 也从未定义,但我仍然可以做类似的 -> 查找匹配项。这就是为什么您的答案只会令人困惑而不是帮助的原因。我通过 $teamname = $FullTable-&gt;find('td',2)-&gt;find('a',0)-&gt;innertext; 让它工作了
    • $FullTable = $html-&gt;find('table[class=ismStandingsTable]',0); 已定义。他指出你应该这样做$href = $teamdetails-&gt;find('a')-&gt;href;
    【解决方案4】:

    您的示例中的问题是 $teamname 是一个字符串,您将其视为 simple_html_dom_node

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多