用PHP解析HTML以获取几篇同类文章的数据


Parsing HTML with PHP to get data for several articles of the same kind

我在一个网站上工作,该网站解析优惠券网站并列出这些优惠券。有一些网站以XML文件的形式提供它们的清单——这些都没有问题。但是也有一些站点不提供XML。我正在考虑解析他们的网站,并从网站内容获得优惠券信息-从HTML与PHP抓取数据。例如,您可以看到以下站点:

http://www.biglion.ru/moscow/

我正在用PHP工作。那么,我的问题是——是否有一种相对简单的方法来解析HTML并获得该站点上列出的每个优惠券的数据,就像我在解析XML时获得的数据一样?

谢谢你的帮助

您总是可以使用DOM解析器,但是从站点抓取内容充其量是不可靠的。

如果他们的布局变化很小,你的应用程序可能会失败。哦,在大多数情况下,这也是反对大多数网站的做法。

虽然使用DOM解析器似乎是一个好主意,但我通常更喜欢使用老式的正则表达式进行抓取。它的工作量少得多,如果网站改变了它的布局,不管你的方法是什么,你都完蛋了。但是,如果使用足够聪明的正则表达式,您的代码应该不受不直接影响您感兴趣的部分的更改的影响。

要记住的一件事是,当提供类名时,在regex中包含一些类名,但假设您需要的信息之间可以有任何内容。例如

preg_match_all('#class="actionsItemHeadding".*?<a[^>]*href="([^"]*)"[^>]*>(.*?)</a>#s', file_get_contents('http://www.biglion.ru/moscow/'), $matches, PREG_SET_ORDER);
print_r($matches);

如果您喜欢使用Php,最可靠的方法是Php DOM Parser。下面是一个只解析元素的示例。

// Include the library
include('simple_html_dom.php');

// Retrieve the DOM from a given URL
$html = file_get_html('http://mypage.com/');
// Find all "A" tags and print their HREFs
foreach($html->find('a') as $e) 
echo $e->href . '<br>';

我也提供了一些关于解析其他html元素的更多信息。我希望这对你有帮助。