【问题标题】:Regex to parse an imdb page and get the name正则表达式解析 imdb 页面并获取名称
【发布时间】:2013-10-26 14:19:30
【问题描述】:

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

【问题讨论】:

  • 你现在不需要正则表达式。首先,将您的 html 页面转换为 XML

标签: php mysql regex


【解决方案1】:

简答

几乎与您之前的问题相同,答案也相同......尽管使用了修改过的正则表达式。

#<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

【讨论】:

  • 非常感谢...这里还有一个问题,我的服务器是 hetzner,电影名称是德语...有什么想法吗??
  • 没问题。至于您的其他问题,我不确定您的意思……您能详细说明一下吗?
  • 嗯,我不知道 确切 IMDB 如何确定使用哪种语言...但是,查看他们的帮助页面:imdb.com/help/show_leaf?titlelanguagedisplay 它建议如果您将akas 添加到网址(即akas.imdb.com/....)前,它应该以原始语言显示标题...应该(?)修复大多数(?)标题的问题。如果没有,也许可以通过英国/美国/等地的代理服务器路由您的请求。会成功吗?
【解决方案2】:

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

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

有用的结果是\1$1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多