在使用PHP抓取HTML时,如何检索单选按钮旁边的文本?

在使用PHP抓取HTML时,如何检索单选按钮旁边的文本?,php,html,dom,simple-html-dom,Php,Html,Dom,Simple Html Dom,现在,我正在使用SimpleHTMLDOM并试图从中提取一些HTML。这是我正在检索的HTML: <form action="playtrivia.jsp" name="playtrivia"> <input name="triviaid" type="hidden" value="452051"><input name="categoryid" type="hidden" value="0"> <table width="100%" b

现在,我正在使用SimpleHTMLDOM并试图从中提取一些HTML。这是我正在检索的HTML:

<form action="playtrivia.jsp" name="playtrivia">
    <input name="triviaid" type="hidden" value="452051"><input name="categoryid" type="hidden" value="0">
    <table width="100%" border="0">
        <tr><td colspan="4" align="center"><div id="title"></div></td></tr>
        <tr><td colspan="4"><hr width="75%"></td></tr>
        <tr><td valign="top" colspan="4" align="center"><br></td></tr><tr><td colspan="4" align="center"><div id="title">Saturday's Secret Seat</div></td></tr>
        <tr><td><img height="1" width="5" src="spacer.gif"></td>
        <td><input name="numanswers" type="hidden" value="3"><div id="subtitle">What's today's Secret Seat?</div><br>
            <input name="answer" type="radio" value="1885233">W03<br>
            <input name="answer" type="radio" value="1885235">Q46<br>
            <input name="answer" type="radio" value="1885234">R90<br></td></tr>
        <tr><td></td><td colspan="3"><br><img height="1" width="10" src="spacer.gif"><input name="submit" type="submit" value="Submit"></td>
        </tr>
    </table>
</form>


星期六的秘密座位 今天的秘密座位是什么?
W03
Q46
R90

这是迄今为止我得到的代码,可以准确地获取隐藏值和单选按钮列表及其值,但我还需要获取紧跟在按钮后面的文本(例如,“W03”、“Q46”和“R90”)

$links=array();
foreach($html->find('input[name=“answer”]”)作为$a){
回声$a.“
”; $links[]=$a->value; } foreach($html->find('input[type=“hidden”]”)作为$a){ echo$a; }

无论我做什么,我都不知道如何获取该文本。

好的。。这里有一个简单的想法,如果你觉得合适的话,就试试吧。就我个人而言,除了单选按钮之外,我从来没有使用过这样的文本。:) 只需将文本附加到每个单选按钮的“value”属性,如下所示:

 <input name="answer" type="radio" value="1885234-R90" />R90

Simple不允许您访问该文本节点,但:

require_once('advanced_html_dom.php');
$html='W03
'; $doc=str_get_html($html); echo$doc->find('input[name=answer]',0)->next->text;
因此,我最终用一些可能的非标准方式找到了答案,但它是有效的。首先要澄清的是,我发布的原始HTML片段并不是被刮取的整个页面,所以我最终不得不想出一个可以处理整个页面的解决方案

在使用SimpleHTMLDOM将HTML解析为TDs块后,我让它将文本分解成数组中可用的块(我最初在上面的代码片段中添加了制表符,以使内容更具可读性;实际的HTML更难看,一开始更难阅读)

$i=0;
foreach($html->find('td')作为$a){
$td[$i]=$a->纯文本;
//echo$td[$i]”Round“$i.”
“;//如果他们更改HTML以确定将秘密座位数据移动到哪个td,请取消对此行的注释 $i++; } //echo$td[26]; $seats=explode(“\r\n”,$td[26]);//然后使用在上一个foreach中找到的圆更新此处的数组号 $i=1; $links=array(); foreach($html->find('input[name=“answer”]”)作为$a){ echo$a.$seats[$i]。“
\r\n”; $links[]=$a->value; $i++; }

感谢每一位帮助我指出正确方向的人。

由于该文本是紧跟在该输入元素之后的
TextNode
的值,我认为对该输入元素调用
nextSibling
就足以获得该文本节点。@CBroe,不幸的是,这不起作用,下一个检测到的节点将是

尝试类似于
$html->find('input[name=“answer”]”,0)->parent()->find('text')
wich将为您提供最后一个td节点中的所有文本,然后希望您能够过滤并获得所需内容…@Enissay:那么SimpleHtmlDOM不遵循正式的DOM规范了…?(更好的说法可能是DOM命名法,因为在DOM nextSibling中,它是一个属性,而不是一个方法。但仍然很糟糕。)@Enessay:我得到的结果是:
致命错误:在第84行的/path/secretseat/index.php中对非对象调用成员函数parent()
我希望可以,但我没有访问原始HTML生成器的权限,而那些已经明确表示他们不会改变任何事情的人。哦。。!!好的。我们可以期待其他人帮助我们。同时,如果我有任何想法,我会在这里发表评论。
 <input name="answer" type="radio" value="1885234-R90" />R90
$ b=explode ('-', $ a);
$ b [0] will hold 1885234 and
$ b [1] will hold R90
require_once('advanced_html_dom.php');
$html = '<input name="answer" type="radio" value="1885233">W03<br>';
$doc = str_get_html($html);
echo $doc->find('input[name=answer]', 0)->next->text;
$i = 0;
foreach($html->find('td') as $a) {
    $td[$i] = $a->plaintext;
    // echo $td[$i] . " Round " . $i . "<br>";          // Uncomment this line if they change the HTML to figure out which TD they moved the secret seat data to
    $i++;
}

//echo $td[26];

$seats = explode("\r\n", $td[26]);                      // Then update the array number here with the round you found in the previous foreach

$i = 1;
$links = array();
foreach($html->find('input[name="answer"]') as $a) {
    echo $a . $seats[$i] . "<br>\r\n";

    $links[] = $a->value;
    $i++;
}