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



现在,我正在使用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"one_answers"R90")

$links = array();
foreach($html->find('input[name="answer"]') as $a) {
    echo $a . "<br>";
    $links[] = $a->value;
}
foreach($html->find('input[type="hidden"]') as $a) {
    echo $a;
}

无论我怎么做,我都不知道怎么得到那个文本。

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

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

现在您可以接收值并使用'-'在php中使用爆炸()函数分割值!!例子:如果$ a包含:1885234-R90

$ b=explode ('-', $ a);
$ b [0] will hold 1885234 and
$ b [1] will hold R90

Simple不会让你得到那个文本节点,但是这个可以:

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;

所以我最终用一些可能是非标准的方法找到了答案,但它有效。首先要澄清的是,我发布的原始HTML片段并不是被抓取的整个页面,所以我最终不得不提出一个可以处理整个页面的解决方案。

在使用SimpleHTMLDOM将HTML解析为td块之后,我只是让它在数组中爆炸()将文本分解为可用的块(我最初在上面的代码片段中添加了选项卡,以使其更具可读性;实际的HTML一开始要难看得多,而且很难阅读)。

$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("rn", $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>rn";
    $links[] = $a->value;
    $i++;
}

感谢所有帮助我指明正确方向的人。

最新更新