我尝试从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的上述数据项。
由于
答案 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库。 在页面上有一些简单的例子,可以帮助您加快速度。
我一直在成功地使用它来完成你想要做的事情。