我是网络抓取新手,所以请原谅我提出这个基本问题,但我正在尝试从 Letterboxd 上的列表中抓取电影 URL,但遇到了一些问题。使用此列表作为示例,我能够在此处的 HTML 中找到链接位置:
但是,我实际上无法从中获取链接。到目前为止,我尝试了两种方法。首先,我尝试抓取所有链接元素,然后希望过滤掉我不需要的元素:
library(rvest)
link <- 'https://letterboxd.com/horrorville/list/horrorville-community-80s-video-store-horror/'
page <- read_html(link)
page %>%
html_elements('a') %>%
html_attr('href')
这确实返回了 URL,但实际上没有一个是列表中的电影的 URL。然后我尝试根据类名进行选择。我不太熟悉 HTML,但我的理解是,class="frame has-menu"
表示两个单独的类frame
,并且has-menu
可以通过用句点分隔它们来在 rvest 中合并,所以我尝试了这个:
page %>%
html_elements('.frame.has-menu') %>%
html_attr('href')
那根本没有返回任何东西。
我看到另一个问题听起来很相似,所以我尝试按照回复者的建议检查浏览器(Firefox)devtools 的“网络”选项卡。我不太清楚该怎么做,但看起来与电影相关的请求使用的是 GET 请求,而在另一个问题中,回复者说问题是 rvest 无法处理 POST 请求。我这里的问题是什么?
经过反复尝试,我终于找到了包含各个 URL 的正确 HTML 部分(如果有更快更有效的方法来找到正确的 HTML 部分,也许其他人可以添加到此帖子中)。我使用了 Chrome 的开发人员工具(右键单击任何页面 > 检查),然后查看代码以查看电影 URL 的位置。
电影 URL 有两个页面,因此我们获取两个页面的 URL 并循环遍历。该
data-target-link
属性仅包含部分 URL,因此我们将站点 URL 附加到其中以获取完整路径。