如何使用PHP从HTML中提取特定内容?

时间:2012-01-04 10:52:41

标签: php javascript jquery html

  

可能重复:
  How to parse and process HTML with PHP?

如何从指定的实时在线HTML页面中提取特定内容?

例如:http://www.gumtree.com/p/for-sale/ovation-semi-acoustic-guitar/93991967

我想检索文字说明,主要图片的路径和价格。所以基本上,我想检索特定div中的内容,可能是html页面中的特定ID或类。

Psuedo代码

$page = load_html_contents('http://www.gumtr..');
$price = getPrice($page);
$description = getDescription($page);
$title = getTitle($page);

请注意我不打算从gumtree或其他任何地方窃取任何内容,我只是提供一个例子。

3 个答案:

答案 0 :(得分:2)

首先,你想做什么,叫做WEBSCRAPING。 基本上,你将html内容加载到一个变量中,所以你需要使用regexp来搜索特定的ids..etc。 在webscraping之后搜索。

HERE is a basic tutorial

THIS book should be useful too.

答案 1 :(得分:2)

如果你想要表格输出

,这样的事情将是一个很好的起点
$raw=file_get_contents($url) or die('could not select');
$newlines=array("\t","\n","\r","\x20\x20","\0","\x0B","<br/>");
$content=str_replace($newlines, "", html_entity_decode($raw));
$start=strpos($content,'<some id> ');
$end = strpos($content,'</ending id>');
$table = substr($content,$start,$end-$start);
preg_match_all("|<tr(.*)</tr>|U",$table,$rows);
foreach ($rows[0] as $row){
if ((strpos($row,'<th')===false)){
 // array to vars
preg_match_all("|<td(.*)</td>|U",$row,$cells);
$var1= strip_tags($cells[0][0]); 
$var2= strip_tags($cells[0][1]); 

等等

答案 2 :(得分:1)

机器人罗伯特推荐的教程Easy web scraping with PHP很有启发性,我在其中做了几点评论。要获得更好的性能,请使用curl。除此之外还处理HTTP标头,SSL,cookie,代理等.Cookie是你必须注意的事情。

我刚发现HTML Parsing and Screen Scraping with the Simple HTML DOM Library。通过DOM解析器更加高级,便利和加速页面解析(而不是正则表达式 - 难以掌握和消耗资源)。我推荐你最后一个100%。