正则表达式解析imdb页面并获取名称

时间:2013-10-26 14:19:31

标签: php mysql regex

我不是很擅长正则表达式并且无处不在。 我可以使用一些帮助来解析此页面(http://www.imdb.com/search/title?count=100&groups=oscar_best_picture_winners&sort=year,desc&ref_=nv_ch_osc_3)以获取电影名称。 P.S:也可以使用虚拟正则表达式。

2 个答案:

答案 0 :(得分:2)

简答

几乎与您之前的问题相同的问题,答案是相同的......虽然修改了正则表达式。

#<td class="number">(\d+).</td>.*?<a href="/title/tt\d+/">(.*?)</a>#s

https://stackoverflow.com/a/19600974/2573622


扩展答案

关于正则表达式

有关详细信息,您可能需要查看以下链接:

http://www.regular-expressions.info/

单击顶部菜单栏上的 Tutorial ,有关于所有正则表达式的解释。

制作正则表达式

首先,您必须从页面中获取相关的html(对于一部电影)...

<td class="number">RANK.</td>
  <td class="image">
    <a href="/title/tt000000/" title="FILM TITLE (YEAR)"><img src="http://imdb.com/path-to-image.jpg" height="74" width="54" alt="FILM TITLE (YEAR)" title="FILM TITLE (YEAR)"></a>
  </td>
  <td class="title">


<span class="wlb_wrapper" data-tconst="tt000000" data-size="small" data-caller-name="search"></span>

    <a href="/title/tt000000/">FILM TITLE</a>

然后删除噪音/可变信息...

<td class="number">RANK.</td>.*?<a href="/title/tt\d+/">FILM TITLE</a>

然后添加您的捕获组......

<td class="number">(RANK).</td>.*?<a href="/title/tt\d+/">(FILM TITLE)</a>

就是这样:

 #<td class="number">(\d+).</td>.*?<a href="/title/tt\d+/">(.*?)</a>#s

结束模式分隔符后的s修饰符使正则表达式引擎使.匹配新行

使用代码

与上一个答案相同(使用修改后的正则表达式)

$page = file_get_contents('http://www.imdb.com/search/title?count=100&groups=oscar_best_picture_winners&sort=year,desc&ref_=nv_ch_osc_3');

preg_match_all('#<td class="number">(\d+).</td>.*?<a href="/title/tt\d+/">(.*?)</a>#s', $page, $matches);


$filmList = array_combine($matches[1], $matches[2]);

然后你可以这样做:

echo $filmList[1];

/**
Output:

Argo

*/

echo array_search("The Artist", $filmList);

/**
Output:

2

*/

http://php.net/manual/en/reference.pcre.pattern.modifiers.php
http://php.net/file_get_contents
http://php.net/preg_match_all
http://php.net/array_combine
http://php.net/array_search

答案 1 :(得分:0)

不确定您执行/不需要哪些反斜杠:

href=\"\/title\/tt.*height=\"74\" width=\"54\" alt=\"([^"]*)\"

有用的结果是\1$1