【发布时间】:2014-05-11 21:37:39
【问题描述】:
我想在 imdb 中找到前 250 部电影的链接。我决定通过查看 HTML 源代码来找到一个通用模式。我找到了“chttp”,但我不确定它是否能把我带到任何地方。我怎样才能找到一种模式来在其上构建链接?
require("XML")
imdb="http://www.imdb.com/chart/top?sort=ir,desc"
imdb.page=readLines(imdb)
g = grep(pattern = "chttp", x = imdb_page)
imdb.lines=imdb.page[g]
这是一个示例输出:
> imdb.lines[1]
[1] " <h3><a href=\"/chart/?ref_=chttp_cht\" >IMDb Charts</a></h3>"
我的主要问题是试图根据我已经编写的代码找出 250 部热门电影中每一部的链接(URL)。我基本上不知道下一步是什么。此外,我不确定我对“chttp”使用 grep 命令的模式是否良好。
所以根据从索引 3 开始的结果,电影标题在奇数索引上:
> imdb.lines[1]
[1] " <h3><a href=\"/chart/?ref_=chttp_cht\" >IMDb Charts</a></h3>"
> imdb.lines[2]
[1] " <td class=\"posterColumn\"><a href=\"/title/tt0111161/?ref_=chttp_tt_1\" ><img src=\"http://ia.media-imdb.com/images/M/MV5BODU4MjU4NjIwNl5BMl5BanBnXkFtZTgwMDU2MjEyMDE@._V1_SX34_CR0,0,34,50_.jpg\" width=\"34\" height=\"50\" />"
> imdb.lines[3]
[1] " <a href=\"/title/tt0111161/?ref_=chttp_tt_1\" title=\"Frank Darabont (dir.), Tim Robbins, Morgan Freeman\" >The Shawshank Redemption</a>"
> imdb.lines[6]
[1] " <td class=\"posterColumn\"><a href=\"/title/tt0071562/?ref_=chttp_tt_3\" ><img src=\"http://ia.media-imdb.com/images/M/MV5BNDc2NTM3MzU1Nl5BMl5BanBnXkFtZTcwMTA5Mzg3OA@@._V1_SX34_CR0,0,34,50_.jpg\" width=\"34\" height=\"50\" />"
> imdb.lines[4]
[1] " <td class=\"posterColumn\"><a href=\"/title/tt0068646/?ref_=chttp_tt_2\" ><img src=\"http://ia.media-imdb.com/images/M/MV5BMjEyMjcyNDI4MF5BMl5BanBnXkFtZTcwMDA5Mzg3OA@@._V1_SX34_CR0,0,34,50_.jpg\" width=\"34\" height=\"50\" />"
> imdb.lines[5]
[1] " <a href=\"/title/tt0068646/?ref_=chttp_tt_2\" title=\"Francis Ford Coppola (dir.), Marlon Brando, Al Pacino\" >The Godfather</a>"
> imdb.lines[7]
[1] " <a href=\"/title/tt0071562/?ref_=chttp_tt_3\" title=\"Francis Ford Coppola (dir.), Al Pacino, Robert De Niro\" >The Godfather: Part II</a>"
> imdb.lines[9]
[1] " <a href=\"/title/tt0468569/?ref_=chttp_tt_4\" title=\"Christopher Nolan (dir.), Christian Bale, Heath Ledger\" >The Dark Knight</a>"
> imdb.lines[10]
[1] " <td class=\"posterColumn\"><a href=\"/title/tt0110912/?ref_=chttp_tt_5\" ><img src=\"http://ia.media-imdb.com/images/M/MV5BMjE0ODk2NjczOV5BMl5BanBnXkFtZTYwNDQ0NDg4._V1_SY50_CR0,0,34,50_.jpg\" width=\"34\" height=\"50\" />"
【问题讨论】:
-
我不知道为什么这个话题被搁置了!!!
-
xpath非常简单。对于标题,请尝试:library(XML); tt <- htmlParse('http://www.imdb.com/chart/top?sort=ir,desc'); xpathSApply(tt, "//td[@class='titleColumn']//a", xmlValue)。另请查看xpathSApply(tt, "//td[@class='titleColumn']//a", xmlAttrs)。 -
我喜欢这个,但我需要 URL 而不是电影名称。谢谢。
-
是的,抱歉 - 我快速阅读了您的问题。我编辑了上面的评论。第二个代码块结果的第一行给出了 url。即
xpathSApply(tt, "//td[@class='titleColumn']//a", xmlAttrs)[1, ]. -
查看我之前的评论。只需将矩阵子集到第一行。或
cbind转置(即t())属性矩阵的标题。
标签: html r web-scraping imdb