我正试图从一家使用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中找到,是一个称为attributesrc。起初,我也切换到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")我不需要使用srcurl,正如我前面所解释的。所以实际上有两种刮法;
使用switchToFrame("nameOfFrame")
使用我以前使用iframe中srcURL的解决方案
希望这能让事情更清楚。

关于html - RSelenium抓取Disqus评论,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38315485/

10-09 07:08