如何从页面获取所有 IMDB id?例如,我想从这里获取所有 id 。在该页面中,网址的格式为:
http://www.imdb.com/title/tt0948470/
我需要使用从页面获取所有 id preg_match_all()
- 有什么可以帮助我吗?
好的,我没有提供熟化的代码。Firefox 中“查看选择源”的一个简单功能让我看看每个链接在格式上都有 href 属性:
href="/title/tt1615065/"
现在构建一个 RegEx 将是微不足道的。我建议你一个好的正则表达式教程和一个非贪婪的匹配就可以了。祝你好运!
好的,我给出了熟化的代码,但我也解释一下:
<a>
href
属性示例/演示
// 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];
;