【问题标题】:Scraping Metacritic: Use a condition to scrape nodes with RvestScraping Metacritic:使用条件通过 Rvest 刮取节点
【发布时间】:2021-08-09 22:51:37
【问题描述】:

我正在编写一个代码来抓取https://www.metacritic.com/game/playstation-4/red-dead-redemption-2/user-reviews的所有评论。

由于长 cmets 出现“展开”按钮,我在 抓取 cmets 时遇到了困难。

我已设法刮取长 cmets,但无法刮取所有其他的:

review <- html_text(html_nodes(webpage,'span[class="blurb blurb_expanded"]'))

我找到了一个使用 Beautifulsoup 的代码,但在 Rvest 上做同样的事情却一无所知

if review.find('span', class_='blurb blurb_expanded'):
        review_dict['review'].append(review.find('span', class_='blurb blurb_expanded').text)
    else:
        review_dict['review'].append(review.find('div', class_='review_body').find('span').text)

你如何在 Rvest 上做类似的事情?您如何为要 scrape 的内容添加条件?您如何刮取所有未扩展的 cmets?

谢谢!!

【问题讨论】:

  • 包括评论家的评论?
  • 仅供参考,它是 scrape(和 scrapingscrapedscraper)不是废品。 “废弃”意味着像垃圾一样扔掉:-(
  • 哈哈谢谢! @balmy

标签: r web-scraping conditional-statements


【解决方案1】:

您不需要条件逻辑。您确实需要一个用户代理标头。然后您可以选择产品评论(product_reviews 类)下的类评论(review_body)。使用html_text2(),您可以为br 元素保留良好的格式。

library(httr)

headers <- c( "user-agent" = "Mozilla/5.0")

r <- httr::GET(url = "https://www.metacritic.com/game/playstation-4/red-dead-redemption-2/user-reviews", httr::add_headers(.headers = headers)) %>%
  content()

reviews <- r %>% html_elements('.product_reviews .review_body') %>% html_text2() %>% lapply(. ,function(x){gsub('… Expand','',x)})
                                                                             

【讨论】:

  • 谢谢!我现在遇到了几个额外的问题: 1/ 格式化:在我的数据中,有“\r”,其中源中有一个换行符,并且在一些引号周围有反冲。我可以添加任何选项来优雅地删除它们吗?或者我应该做一个额外的功能来删除这些? 2/“长评论”:不幸的是,这并不完全检索长评论,但它实际上合并了折叠+扩展评论。您能想到的任何解决方法?谢谢!!
  • 嗨,1)这只是一个字符串表示的东西,当您实际将该内容写入文件时,您会得到新的行吗? 2)您是说缺少信息还是重复信息?有没有可以提及问题所在的示例评论?
  • 嗨,1/ 它实际上在文件中,但我设法用 .Replace 2/ 清理它,例如在您的代码中的评论 [2] 中,文本是“10 分这里的评论必须是一些铁杆粉丝或[折叠评论的其余部分]这里的 10 条评分评论必须是一些铁杆粉丝或[扩展评论的其余部分]。
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
相关资源
最近更新 更多