PHP DOM抓取特定的信息子集

时间:2013-05-24 12:39:49

标签: php domdocument

相关网页为http://assignments.uspto.gov/assignments/q?db=pat&pub=20060030630

现在,我只想说我想在第一次任务中捕获受让人。那里的相关代码看起来像

   <div class="t3">Assignee:</div>
  </td>
 </tr>
</table>
</td><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
 <tbody valign="top">
  <tr>
   <td>
    <table>
     <tr>
      <td>
       <div class="p1">
        <a href="/assignments/q?db=pat&amp;asned=LEAR%20CORPORATION">LEAR CORPORATION</a>
       </div>
      </td>
     </tr>
    <tr>
   <td><span class="p1">21557 TELEGRAPH ROAD</span></td>
  </tr>
  <tr>
   <td><span class="p1">SOUTHFIELD, MICHIGAN 48034</span></td>
  </tr>
 </table>
 </td>
</tr>
</tbody>
</table>
</td>
</tr>

我可以假设使用xpath并使用类p1从跨度中获取所有内容,除了在整个页面中使用的内容基本上都是一切,对于Learning公司所在的div类也是如此。

那么我有没有办法只读“Assignees”,然后抓住与之相关的信息?

我想如果我能理解如何做到这一点,那么我可以从中推断并弄清楚如何抓取我想要的页面上的任何特定数据,即抓取任何特定任务的传输数据。

但是,如果说,我只是抓住页面上的所有数据(卷轴/框架,传送带,转让人,受让人,通讯员的每项任务,以及关于专利本身的标题信息),可能更容易做到而不是试图抓住每一条信息?

1 个答案:

答案 0 :(得分:0)

没有明确的方法可以做到这一点,因为我们在DOM中没有指定这些信息。这是非常随意的。

我建议使用一些数学来确定受让人居住在DOM中的位置模式。

例如,我们知道,对于p1的每个类,受让人值为位置16,每个23rd位置都会发生新的分配。使用循环你可以搞清楚。

这应该让你至少开始。

$Site = file_get_contents('http://assignments.uspto.gov/assignments/q?db=pat&pub=20060030630');

$Dom = new DomDocument();
$Dom->loadHTML($Site);
$Finder = new DomXPath($Dom);
$Nodes = $Finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' p1 ')]");

$position = 0;
foreach($Nodes as $node) {
    if(($position % 16) == 0 && $position > 0) {
        var_dump($node->nodeValue);
        break;
    }
    $position++;
}