R从StockTwits网站抓取数据

5jvtdoz2  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(185)

我想从StockTwits平台上发布的推文中获取一些信息。这里你可以看到一条示例推文:https://stocktwits.com/3726859/message/469518468我已经问过一次同样的问题(R How to web scrape data from StockTwits with RSelenium?),但是StockTwits网站已经更改,我无法再使用相同的html_nodes()命令。因此,如果有人能帮助我输入html_nodes()函数,我将非常高兴。
我想阅读以下信息:回复数、转发数、点赞数:

到目前为止,我已经做到了这一点:

library(rvest)

read_html("https://stocktwits.com/SunAndStorm/message/499613811") |> 
  html_nodes()

最终结果应该是一个 Dataframe ,如下所示:

# A tibble: 1 × 5
  Reply Reshare Like  Share Search
  <lgl> <lgl>   <lgl> <lgl> <lgl> 
  5     0       1     0     0
ut6juiuv

ut6juiuv1#

我不使用html节点,而是使用xpath查找元素。

url <- "https://stocktwits.com/SunAndStorm/message/499613811"

# Set up driver
driver <- rsDriver(browser = "firefox", chromever = NULL)
remDr <- driver[["client"]]

# Go to site
remDr$navigate(url)

# Extract information using xpath
info <- remDr$findElement(using = "xpath", "/html/body/div[2]/div/div[2]/div[2]/div[2]/div/div/div/div[1]/div[1]/div/div[2]/article/div/div[5]")

然后可以使用getelementtext查找信息

> info$getElementText()
[[1]]
[1] "4Comments\n0Reshares\n7Likes"

如果您需要帮助将此字符串转换为 Dataframe ,请告诉我,我可以帮助您,但我认为这不是主要问题。
种类

sczxawaw

sczxawaw2#

在开发者工具中的网络部分,你会发现他们的API。用感兴趣的tweet ID调用它。
我在这里为你写了一个开始。我找不到重新分享和搜索。但我确信它在那里的某个地方。因为你有成千上万的推文来收集信息,这种方法更有效。

library(tidyverse)
library(httr2)

get_stockwits <- function(id) {
  data <-
    str_c("https://api.stocktwits.com/api/2/messages/", id, "/conversation.json?limit=21") %>%
    request() %>%
    req_perform() %>%
    resp_body_json(simplifyVector = TRUE)

  tibble(
    tweet = data %>%
      getElement("message") %>%
      getElement("body"),
    reply = data %>%
      getElement("message") %>%
      getElement("conversation") %>%
      getElement("replies"),
    likes = data %>%
      getElement("message") %>%
      getElement("likes") %>%
      getElement("total"),
    comments = data %>%
      getElement("children") %>%
      getElement("messages") %>% 
      getElement("body")
  ) %>%
    nest(comments = comments)
}

get_stockwits(469518468)

# A tibble: 1 x 4
  tweet                             reply likes comments        
  <chr>                             <int> <int> <list>          
1 $GME going back in all this month     5     1 <tibble [2 x 1]>

取消嵌套comments以查看注解

get_stockwits(469518468) %>% 
  unnest(comments)

# A tibble: 2 x 4
  tweet                             reply likes comments                     
  <chr>                             <int> <int> <chr>                        
1 $GME going back in all this month     5     1 @okkenny yeah with options   
2 $GME going back in all this month     5     1 @okkenny playing monthly only

相关问题