从网站解析特定数据项

时间:2012-05-25 22:29:39

标签: php parsing screen-scraping web-scraping

我尝试从this webpage

中检索以下数据变量
  • 地址
  • 邮政编码
  • 存储电话
  • 药房电话
  • 营业时间
  • 药房时间
  • 取件选项
  • 在此商店/位置
  • 网站到营业时间

我试过这种方式,但是我无法将一些数据分开存储在上面的数据变量中,所以需要一些PHP专家的帮助和建议

 $html = file_get_html('http://www.walmart.com/storeLocator/ca_storefinder_results.do?serviceName=&rx_title=com.wm.www.apps.storelocator.page.serviceLink.title.default&rx_dest=%2Findex.gsp&sfrecords=50&sfsearch_single_line_address=K6T');
foreach($html->find('div[class=StoreAddress] div[1]') as $name)
{
echo $name->innertext.'<br>';
}

本网站的html很难识别每个数据项的标签,因为它们没有分配给标签的正确ID。任何人都可以建议使用简单且可扩展的方法来解析来自此website的上述数据项。

由于

3 个答案:

答案 0 :(得分:2)

我看到他们在地址之前实现了一个很好的hr标签。 在hr标签上展开它并使用地址的剩余部分重建html对象。 然后遍历div并使用preg_match查看对象是否包含对所需数据的任何引用。

foreach($html->find(’div’) as $test)
    {
     if(preg_match(’/Adress/’,$test->innertext))
        {
        filter out addy
        }
    }

答案 1 :(得分:1)

html并不是那么复杂。 Php的迭代器和dom / regex函数对于像这样的任务来说很笨拙但是可以做到:

$dom = new DOMDocument();
@$dom->loadHTMLFile('http://www.walmart.com/storeLocator/ca_storefinder_details_short.do?rx_dest=/index.gsp&rx_title=com.wm.www.apps.storelocator.page.serviceLink.title.default&edit_object_id=2092&sfsearch_single_line_address=K6T');
$xpath = new DOMXPath($dom);

foreach($xpath->query('//div[@class="StoreAddress"]') as $div) {
  // title
  echo $xpath->query(".//div[1]", $div)->item(0)->nodeValue . "\n";
  // street
  echo $xpath->query(".//div[2]", $div)->item(0)->nodeValue . "\n";
  // city state and zip
  preg_match('/(.*), ([A-Z]{2}) (\d{5})/', $xpath->query(".//div[3]", $div)->item(0)->nodeValue, $m);
  // city
  echo $m[1] . "\n";
  // state
  echo $m[2] . "\n";
  // zip
  echo $m[3] . "\n";
}

答案 2 :(得分:1)

试用simple_html_dom库。 在页面上有一些简单的例子,可以帮助您加快速度。

我一直在成功地使用它来完成你想要做的事情。