【问题标题】:Webscraping with R google searches使用 R google 搜索进行网页抓取
【发布时间】:2021-06-12 15:23:19
【问题描述】:

我正在寻找一种在谷歌搜索中使用 R 进行网络抓取的方法。鉴于困难(cookie 和不稳定的标签),我想分享一些想法,关于如何在谷歌搜索上使用 R 进行网络抓取仍然是可能的。

这里是一个例子。我选择谷歌“法拉利”并尝试检索所有谷歌搜索页面的 h3。我特别想得到每个 h3 aref-links。

但是,我只能检索 h3 标签和其他一些内容。

url = 'https://www.google.com/search?q=ferrari'

first_page <- read_html(url)

h3 <- first_page %>%   
  html_nodes("a h3")

h3_links <- first_page %>%   
  html_nodes("a h3") %>% html_attr("href")


basic <- first_page %>%   
  html_nodes("span span")

paragraphs <- first_page %>%   
  html_nodes("div div")

因此,我只想问是否有人知道如何在 google 上搜索尽可能多的网页。这可能有助于找到合适的方式在 google 上进行网络抓取并讨论 google 跟踪方式。

【问题讨论】:

  • 这显然会破坏 google ToS,他们会立即阻止您。
  • 他们已经掌握了很多关于一切的信息。既然 Google 获取了我们和每个人的数据,为什么我们不在 Google 中跟踪我们的数据呢?为了进行公开讨论,我证明了@user12256545 的贡献:
  • library(robotstxt) robotstxt::paths_allowed("google.com/search?q=ferrari") # 否 因此,我只想问是否有另一个 waz 可以像使用 RSelenium 或通过 Docker 一样绕过这个障碍

标签: r web-scraping google-search


【解决方案1】:

也许你可以试试这样的:

extract_Info_By_Page <- function(page_Content)
{
  page <- read_html(page_Content)
  h3 <- page %>% html_nodes("a h3")
  h3_links <- page %>% html_nodes("a h3") %>% html_attr("href")
  basic <- page %>% html_nodes("span span")
  paragraphs <- page %>% html_nodes("div div")
  return(list(page = page, h3 = h3, 
              h3_links = h3_links, basic = basic,
              paragraphs = paragraphs))
}

library(RSelenium)
library(stringr)
library(rvest)
library(xml2)

shell('docker run -d -p 4445:4444 selenium/standalone-firefox')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4445L, browserName = "firefox")
remDr$open()

first_Page <- 'https://www.google.com/search?q=ferrari'
remDr$navigate(first_Page)
page_Content <- remDr$getPageSource()[[1]]

links_Other_Pages <- str_extract_all(page_Content, pattern = "\\<a.aria-label=(.*)\\</a\\>")
links_Other_Pages <- str_split(links_Other_Pages, pattern = "\\<a.aria-label")
links_Other_Pages <- str_extract_all(links_Other_Pages, 'href[^<]*\\<span class\\=\\\\')[[1]]
links_Other_Pages <- str_remove_all(links_Other_Pages, '\\<span class')
links_Other_Pages <- str_remove_all(links_Other_Pages, 'id|pnnext|style|text|align|left')
links_Other_Pages <- unlist(str_extract_all(links_Other_Pages, 'search.*[:alnum:]'))

links_Pages <- c(first_Page, links_Other_Pages)
nb_Pages <- length(links_Pages)
result_By_Page <- list()

for(i in 1 : nb_Pages)
{
  print(i)
  remDr$navigate(links_Pages[i])
  page_Content <- remDr$getPageSource()[[1]]
  result_By_Page[[i]] <- extract_Info_By_Page(page_Content)
}

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 1970-01-01
    • 2014-12-28
    • 2018-02-15
    • 1970-01-01
    相关资源
    最近更新 更多