2011-11-04 253 views
0

通过php从外部网站获取内容的最佳方式是什么?从外部网页获取数据

使用php如何进入网页(例如:http://store.domain.com/1/),并扫描在两者之间找到的数据(它是字母C和E)的HTML编码。我使用哪种php方法?

<span id="ctl00_ContentPlaceHolder1_phstats1_pname">C</span> 
<span id="ctl00_ContentPlaceHolder1_phstats2_pname">E</span> 

然后 “C”(找到的字符串)保存到$ PNAME

$_session['pname1'] = $pname1; 
$_session['pname2'] = $pname2; 
+0

这就是所谓的屏幕抓取,并已在此网站上多次提问/回答过:http://stackoverflow.com/questions/519920/screen-scraping-technique-using-php –

回答

2

最有效的方法是:

$content = file_get_contents('http://www.domain.com/whatever.html'); 

$pos = str_pos($content,'id="c'); 
$on=0; 
while($pos!==false) 
{ 
$content = substr($content,$pos+4); 
$pos = str_pos($content,'"'); 
$list[$on] = substr($content,0,$pos); 
$on++; 
$pos = str_pos($content,'id="c'); 
} 

然后,所有你的价值观会在$ list数组,它的数量是$ on。

你也可以用一个preg函数在一行中做到这一点,但我喜欢老派的方法,速度更快了一个纳秒。

+0

应该是 $ pos = str_pos($ content,''); ?什么是最好的方法来分开做,而不是将所有列入数组中 – acctman

+0

不,它应该是原样,否则您只会得到1个结果。 – Alasdair

+0

最好将它们放入一个数组中,然后在使用for($ run = 0; $ run <$ on; $ run ++)之后单独处理它们,并且在该循环中$ list [$ run]将包含每个ID。 – Alasdair

0

我想你实际上可以使用file_get_contents("http://store.domain.com/1/");做一个HTTP请求。

就解析它而言,取决于项目有多大以及您愿意去付出多少努力,您可以找到如此处的HTML DOM解析器,如http://simplehtmldom.sourceforge.net/或只需搜索id="ctl00_ContentPlaceHolder1_phstats1_pname",然后逐个拆分它(不是推荐的做事方式)。

3

您需要使用网页抓取技术。只需使用HTML DOM LibraryNode.jsjQuery等技术即可完成。你可以找到关于这个herehere.

一些有用的教程,你还可以看到这个thread关于贯彻刮使用PHP

0

它可以由CURL完成。但是你可以在你的项目中包含简单的HTML DOM解析器。它很容易使用,并将为您的目的服务。

文档在这里。 http://simplehtmldom.sourceforge.net/