0

我试图从这个网页中检索以下数据变量

  • 地址
  • 城市
  • 状态
  • 邮政编码
  • 商店电话
  • 药房电话
  • 营业时间
  • 药房时间
  • 取件选项
  • 在这个商店/位置
  • 站点到存储时间

我尝试过这种方式,但我无法分离出一些数据来存储在上述数据变量中,所以需要一些 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。任何人都可以建议简单且可扩展的方法来解析本网站的上述数据项。

谢谢

4

3 回答 3

2

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

foreach($html->find(’div’) as $test)
    {
     if(preg_match(’/Adress/’,$test->innertext))
        {
        filter out addy
        }
    }
于 2012-05-25T22:44:41.653 回答
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";
}
于 2012-05-26T23:44:55.543 回答
1

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

我一直在成功地将它用于您正在尝试做的事情。

于 2012-05-28T02:36:21.907 回答