-3

如何从页面获取所有 IMDB id?例如,我想从这里获取所有 id 。在该页面中,网址的格式为:

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

我需要使用从页面获取所有 id preg_match_all()- 有什么可以帮助我吗?

4

2 回答 2

1

好的,我没有提供熟化的代码。Firefox 中“查看选择源”的一个简单功能让我看看每个链接在格式上都有 href 属性:

href="/title/tt1615065/"

现在构建一个 RegEx 将是微不足道的。我建议你一个好的正则表达式教程和一个非贪婪的匹配就可以了。祝你好运!

于 2012-06-28T14:56:58.133 回答
1

好的,我给出了熟化的代码,但我也解释一下:

  1. 获取 HTML 源代码
  2. 解析所有<a> href属性
  3. 如果它们的值匹配,则使用正则表达式进行测试。
  4. 如果匹配,请从链接中提取 id 并以不会重复的方式存储它。
  5. 完毕。

示例/演示

// 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];
;
于 2012-06-28T15:46:39.640 回答