2011-11-04 267 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/