0

有问题的网页是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 中抓取所有内容,除了整个页面中基本上所有内容都使用了这个东西,对于 lear 公司所在的 div 类也是如此。

那么有没有办法让我只阅读“受让人”,然后只获取与其相关的信息?

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

但是,如果说,我只是要获取页面上的所有数据(卷轴/框架、运输工具、转让人、受让人、每项转让的通讯员,以及有关专利本身的标题信息),这可能比尝试更容易做到获取每条信息?

4

1 回答 1

0

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

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

例如,我们知道对于 的每个类p1,受让人的值为 position 16,并且每个位置都会出现一个新的 Assignment 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++;
}
于 2013-05-24T13:11:45.790 回答