选择与不同 <td 中的文本相同的表格行上的 URL>

Selecting URL on same table row as text in different <td>

提问人:Sackling 提问时间:10/14/2017 更新时间:10/14/2017 访问量:21

问:

我有一张我正在尝试抓取的表格,它看起来像下面这样:

https://i.stack.imgur.com/YqvVD.jpg

以下是表中一行的 HTML:

<TR >

            <script>
                  if (document.getElementById("Function").value != 'Customer')
                            document.write('<td align="center">CO</td>');</script>
            <td align="left"><a href="OrdDetList.pgm?Order=8M216&Purpose=Customer&ShowPrice=&OpenOnly=Y">8M216 </a></td>
             <script> if (document.getElementById("Function").value != 'Customer')
                            document.write('<td align="center">R</td> <td align="center">O</td>');</script>
                            <td align="center">Backordered</td>
            <td align="left"><a href="OrdersList.pgm?Customer=33333&CompDiv=all&Function=Customer&OpenOnly=Y&ShowPrice= &YearsBack=      ">70036</a>
                    <a class=info href="#"><img src="../images/help.gif" border=none>
                        <span>
                        <div id="SoldToNameAddress">
                    123 our address<br>
                        </div>
                        </span>
                            </a>
                    </td>
            <td align="left">our company</td>
            <td align="left"><a href="OrdersList.pgm?Customer=33333&CompDiv=all&Function=Customer&OpenOnly=Y&ShowPrice= &YearsBack=      ">70037</a>
                    <a class=info href="#"><img src="../images/help.gif" border=none>
                        <span>
                        <div id="ShipToNameAddress">
                    our address
                        </div>
                        </span>
                            </a>
                    </td>
            <td align="left">our company name</td>
            <td align="left">70037</td>
            <td align="left">052317</td>
        <script>
                  if (document.getElementById("Function").value != 'Customer')
                            document.write('<td align="center">3</td>');</script>
            <td align="left"><a class=info href="#">17/05/23<span>May 23, 2017        </span></a></td>
            <td align="left"><a class=info href="#">17/05/23<span>May 23, 2017        </span></a></td>
            <td align="center"></td>

        </TR>

我的目标是选择 URL:

<a href="OrdDetList.pgm?Order=8M216&Purpose=Customer&ShowPrice=&OpenOnly=Y">8M216 </a>

当我们的采购订单被搜索时<td align="left">052317</td>

我是使用 Xpath 的新手,所以到目前为止,我能够走的最远就是能够通过搜索 8M216 直接获取 URL。但是我不确定如何使用 XPATH 根据另一个表单元格中的 PO 052317为我提供另一个 URL。

这是我到目前为止的代码,但由于我上面所说的,它有点没用:

<?php

$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);

$html = file_get_contents('https://thewebsiteiamscraping', false, stream_context_create($arrContextOptions)); //get the html returned from the following url

$order_doc = new DOMDocument();

libxml_use_internal_errors(TRUE); //disable libxml errors

if(!empty($html)){ //if any html is actually returned

    $order_doc->loadHTML($html);
    libxml_clear_errors(); //remove errors for yucky html

    $order_xpath = new DOMXPath($order_doc);

    //get order URLS based on our PO#
    $order_row = $order_xpath->query('//a[text()="8M216 "]/@href');

    if($order_row->length > 0){
        foreach($order_row as $row){
            echo $row->nodeValue . "<br/>";
        }
    }
}
?>
XML XPath XHTML

评论

0赞 Mr Lister 10/14/2017
也许是愚蠢的问题,但是代码片段应该是什么版本的 HTML?

答:

1赞 Zakaria Shahed 10/14/2017 #1

我认为这个 XPath 指令将帮助您找到正确的 XPath

enter image description here

您可以在 Chrome 中打开控制台,然后通过键入 来检查 XPath。这将返回一个匹配值的数组。如果它为空,则表示页面上没有匹配项。$x("your_xpath_here")

评论

0赞 Sackling 10/14/2017
这正是我需要看到的,它的工作非常感谢!