PHP - 处理屏幕截图页面

时间:2011-02-14 15:29:31

标签: php screen-scraping

我已经使用过如何使用cURL和PHP成功抓取网页的主题。我已经设法使该部分正常工作,我需要做的是从页面处理一些没有可识别的类/标记的信息,我可以轻松使用。我的示例代码是:

<h3>Building details:</h3>
<p>Disabled ramp access<br />
  Male, female and disabled toilets available</p>
  <br/>
  <p><strong>Appointment lead times:</strong></p>
  <p><strong>Type 1</strong>:&nbsp; 8 weeks<br />
  <strong>Type 2</strong>:&nbsp;5 weeks<br />
  <strong>Type 3</strong>:&nbsp;3 weeks<br />
  <strong>Type 4</strong>:&nbsp;3 weeks
</p>

我需要做的是获取不同类型预约的周数提前期,主要是类型1.有时预约提前期不可用并说明:

<p><strong>Appointment lead times:</strong></p>
<p><strong>Type 1</strong>:&nbsp; No information available<br />

我已经研究了几种方法,RegEx,简单DOM解析器等,但还没有真正解决我想要实现的目标。

非常感谢。

2 个答案:

答案 0 :(得分:1)

在做这种事情时,它会变得混乱。你必须在代码中找到一些点,以可靠的方式将它分开。你的样本有一个我能看到的地方:Type 1</strong>:&nbsp;。所以,我会这样做:

$parts = explode('Type 1</strong>:&nbsp;', $text);

现在,$ parts [1]的第一位将包含您的时间范围或无信息消息。让我们用最后的<br />来切断它:

if (count($parts) == 2) {
  $parts = explode('<br />', $parts[1]);
  $parts = trim(str_replace(' weeks', '', $parts[0]));
}

现在,$ parts包含我们的消息,或者我们的时间范围是数字。 is_numeric将显示方式!这是一种肮脏的方法,但通常是抓取页面数据。在假设你对下一步做好之前,一定要检查每个步骤的结果。

答案 1 :(得分:1)

使用http://php.net/manual/en/book.tidy.php转换为有效的xml,然后您可以通过simplexml http://www.w3schools.com/php/php_xml_dom.asp

轻松查询xpath