通过preg_match_all获取页面url中的所有imdb id
如何从页面获取所有IMDB ID?例如,我想从here获取所有ID。在该页面,网址的格式为:通过preg_match_all获取页面url中的所有imdb id
http://www.imdb.com/title/tt0948470/
我需要使用preg_match_all()
页的所有ID - 可以在任何帮助我吗?
好吧,我给煮熟了的代码,但我也解释:
- 获取HTML源
- 解析所有
<a>
href
属性 - 测试用正则表达式,如果他们的价值火柴。
- 如果匹配,请从链接中提取id并将其存储为不会重复的方式。
- 完成。
例/ 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];
;
解析错误:语法错误,意外T_OBJECT_OPERATOR在线12 我认为我的php版本不受支持 –
@M索娜:你有哪一个?无论如何,做了一个编辑,应该这样做,除非你使用我怀疑的一些非常古老的PHP版本。 – hakre
你好,现在工作谢谢 我的php版本是5.3.13 –
好吧,我没有给出一个熟化的代码。在Firefox中的“查看源的选择”的一个简单的功能让我看看,每个环节都有的href属性的格式:
href="/title/tt1615065/"
现在应当是微不足道建立一个正则表达式。我建议你一个好的RegEx tutorial和一个非贪婪的比赛将完成这项工作。祝你好运!
请把更多的精力投入到格式化您的问题 - 使用降价,使其尽可能地易读和使用如果可以的话,可以使用英文拼写检查程序(在Firefox中,这是标准提供的编辑框)。 – halfer