刮页

时间:2011-02-13 05:02:33

标签: php screen-scraping

在抓取经销商库存页面的可怕混乱中最好的做法是什么(使用js来document.write a< td>,然后使用明文html关闭它)?没有divs / tds / anything标有任何id或类等。

我应该直接使用preg_match(?_ all)这个东西还是我可以做一些xpath魔法? 没有api,没有feed,没有xml,没有任何干净。

编辑:

- 我基本上认为atm就像http://pastebin.com/raw.php?i=EuMfRVD5一样 - 这是我最好的选择还是有其他方式?

2 个答案:

答案 0 :(得分:0)

通常,您应该始终使用http://www.php.net/DOM来解析页面。正则表达式是可怕的,通常不可能用于解析HTML,因为这不是它的构建。

然而......如果页面使用大量的javascript输出内容,那么无论如何你都是SoL。你可以真正做到的 best 是抓住它并通过浏览器运行并解析渲染的内容。它可以自动化,虽然它是一种设置的皮塔饼。

但是......考虑到问题w / js输出了很多......也许正则表达式真的是最好的路线。但我想首先,这取决于实际内容是什么,以及你试图从页面获得什么。

答案 1 :(得分:0)

你的例子还不够实例。但是,既然你似乎并不需要突出显示元信息,那么JS-obfuscation可能会被撤消:

$html = preg_replace('# <script .*? (?: document.write\("(.*?)"\) )? .*? </script> #six', "$1", $html);

可能之后已经足够好了,可以通过其中一个DOM库来管理它。