我正试图从一家使用RSelenium浏览器的本地在线报纸上搜集或获取discus评论的文本,但我发现这对我的能力来说有点困难。我已经搜索了很多地方,但是没有找到正确的信息,或者我使用了错误的搜索词(很可能)。
到目前为止,我已经设法从页面中获得“普通”的html,但无法确定正确的类、css选择器或id来获得disks注释。我也试过Selectorgadget,但这只指向#dsq-app2
,它一次选择整个disks区域,不允许选择区域的较小部分。我用elems <- mybrowser$findElement(using = "id", "dsq-app2")
对RSelenium进行了同样的尝试,并将“environment”存储在elems
中。然后我试图在elems
中找到子元素,但结果是空的。
通过开发人员工具查看页面,我可以看到有趣的东西在一个名为#dsq-app2
的I frame中,并且在使用elems$getPageSource()
切换到框架后,成功地通过elems$switchToFrame("dsq-app2")
提取了它的所有源代码。这会将所有的html输出为一个大的“脏”块,并且缺少搜索<p>
标记和其他感兴趣的元素(比如data-role="username"
中的poster用户名)中所需的内容,我似乎找不到正确的前进方向。
我也尝试过使用here给出的建议,但是discs的设置有点不同。我正在尝试的一个页面是this,其中大部分评论区域位于一个名为conversation
的部分中,还有大量其他id,如posts
和带有id=post-list
的未排序列表,它们最终携带了我需要删除的评论。
任何想法或帮助技巧都是最受欢迎的,并收到与感谢。
最佳答案
经过大量的测试和试验,我终于成功了。我不知道这是不是最干净或最漂亮的解决方案,但它有效。希望别人会觉得有用。基本上我所做的就是找到只指向注释的url。这在“dsq-app2”iframe
中找到,是一个称为attribute
的src
。起初,我也切换到iframe,但发现没有iframe的情况下也可以工作。
remDr$navigate("toTheRequiredPage")
elemsource <- remDr$findElement(using = "id", value = "dsq-app2")
src <- elemsource$getElementAttribute("src") # find the src attribute within the iframe`
remDr$navigate(src[[1]]) # navigate to the src url
# find the posts from the new page
elem <- remDr$findElement(using = "id", value = "posts")
elem.posts <- elem$findChildElements(using = "id", value = "post-list")
elem.msgs <- elem.posts[[1]]$findChildElements(using = "class name", value = "post-message")
length(elem.msgs)
msgtext <- elem.msgs[[1]]$getElementText() # find first post's text
msgtext # print message
更新:我发现如果我使用
remDr$switchToFrame("dsq-app2")
我不需要使用src
url,正如我前面所解释的。所以实际上有两种刮法;使用
switchToFrame("nameOfFrame")
或使用我以前使用iframe中
src
URL的解决方案希望这能让事情更清楚。
关于html - RSelenium抓取Disqus评论,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38315485/