如何从页面获取所有IMDB ID?例如,我想从here获取所有ID。在该页面中,网址的格式为:
http://www.imdb.com/title/tt0948470/
我需要使用preg_match_all()
从页面获取所有ID - 可以帮助我吗?
答案 0 :(得分:1)
好的,我没有给出一个熟练的代码。 Firefox中“查看选择源”的简单功能让我看看每个链接的格式都是href属性:
href="/title/tt1615065/"
现在建立一个RegEx是微不足道的。我建议你一个好RegEx tutorial,非贪婪的比赛将完成这项工作。祝你好运!
答案 1 :(得分:1)
好的,我正在给出熟练的代码,但我也会解释一下:
<a>
href
属性实施例/ 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)
...
Edit2:只是看到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];
;