2012-06-28 121 views
-3

如何從頁面獲取所有IMDB ID?例如,我想從here獲取所有ID。在該頁面,網址的格式爲:通過preg_match_all獲取頁面url中的所有imdb id

http://www.imdb.com/title/tt0948470/ 

我需要使用preg_match_all()頁的所有ID - 可以在任何幫助我嗎?

+1

請把更多的精力投入到格式化您的問題 - 使用降價,使其儘可能地易讀和使用如果可以的話,可以使用英文拼寫檢查程序(在Firefox中,這是標準提供的編輯框)。 – halfer

回答

1

好吧,我給煮熟了的代碼,但我也解釋:

  1. 獲取HTML源
  2. 解析所有<a>href屬性
  3. 測試用正則表達式,如果他們的價值火柴。
  4. 如果匹配,請從鏈接中提取id並將其存儲爲不會重複的方式。
  5. 完成。

例/ Demo

// initialize 
$ids = array(); 
$url = 'http://www.imdb.com/movies-coming-soon/'; # this URL 
$expr = '//a/@href';        # these attributes 
$regex = '(/title/(tt\d{5,7})/)u';     # matching this regex 
$match = 1;           # take group 1 

// process 
foreach((new DOMXpath(@DOMDocument::loadHTMLFile($url)))->query($expr) as $obj) 
    preg_match($regex, $obj->value, $matches) 
     && $ids[$matches[$match]] = 0; 
    ; 
$ids = array_keys($ids); 

// output 
print_r($ids); 

注:您標記這個問題PHP5,電流穩定PHP5是5.4,所以是這樣的例子,如果你使用curl包裝配置PHP5的版本,這代碼是curl

編輯:下PHP版本:

... 
// process 
$xp = new DOMXpath(@DOMDocument::loadHTMLFile($url)); 
foreach($xp->query($expr) as $obj) 
... 

編輯2:只看到IMDB標記它是標記,因此可以檢索該列表的實際影片條目,而不是該頁面上的任何標題鏈接。

這需要對所使用的xpath表達式進行一些改進。因爲解析現在更加智能,重複不存在,所以沒有必要將其刪除:

// initialize 
$ids = array(); 
$url = 'http://www.imdb.com/movies-coming-soon/'; # this URL 
$expr = '//*[@itemtype="http://schema.org/Movie"] 
       //a[@itemprop="url"]/@href';  # these attributes 
$regex = '(/title/(tt\d{5,7})/)u';     # matching this regex 
$match = 1;           # take group 1 

// process 
$xp = new DOMXpath(@DOMDocument::loadHTMLFile($url)); 
foreach($xp->query($expr) as $obj) 
    preg_match($regex, $obj->value, $matches) 
     && $ids[] = $matches[$match]; 
; 
+0

解析錯誤:語法錯誤,意外T_OBJECT_OPERATOR在線12 我認爲我的php版本不受支持 –

+0

@M索娜:你有哪一個?無論如何,做了一個編輯,應該這樣做,除非你使用我懷疑的一些非常古老的PHP版本。 – hakre

+0

你好,現在工作謝謝 我的php版本是5.3.13 –

1

好吧,我沒有給出一個熟化的代碼。在Firefox中的「查看源的選擇」的一個簡單的功能讓我看看,每個環節都有的href屬性的格式:

href="/title/tt1615065/" 

現在應當是微不足道建立一個正則表達式。我建議你一個好的RegEx tutorial和一個非貪婪的比賽將完成這項工作。祝你好運!

相關問題