Php 通过preg_match_all从页面url获取所有imdb id

Php 通过preg_match_all从页面url获取所有imdb id,php,curl,Php,Curl,如何从一个页面获取所有IMDB ID?例如,我希望从中获取所有ID。在该页面中,URL的格式如下: http://www.imdb.com/title/tt0948470/ 我需要使用preg\u match\u all从页面获取所有ID-有什么可以帮助我的吗?好的,我没有给出一个伪造的代码。Firefox中的View selection source的一个简单功能让我可以查看每个链接的href属性的格式: href="/title/tt1615065/" 现在,构建一个正则表达式将变得微不

如何从一个页面获取所有IMDB ID?例如,我希望从中获取所有ID。在该页面中,URL的格式如下:

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

我需要使用preg\u match\u all从页面获取所有ID-有什么可以帮助我的吗?

好的,我没有给出一个伪造的代码。Firefox中的View selection source的一个简单功能让我可以查看每个链接的href属性的格式:

href="/title/tt1615065/"

现在,构建一个正则表达式将变得微不足道。我建议你找一个好的和不贪婪的配对。祝你好运

好吧,我给出了精心编制的代码,但我也解释了:

获取HTML源代码 解析所有

注意:您标记了这个问题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];
;

请把更多的精力放在格式化您的问题上-使用标记使其尽可能可读,如果可以的话,在Firefox中使用英语拼写检查器这是在编辑框上提供的标准。解析错误:语法错误,意外的T_OBJECT_OPERATOR online 12我认为我的php版本不是supported@M索纳:你有哪一个?不管怎么说,做了一次编辑,应该会这样做,除非你使用的是非常旧的PHP版本,我对此表示怀疑。@M Sona:我再次改进了它,只是看到IMDB使用微格式,这对解析网站很有帮助。
// 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];
;