r - 使用 R google 搜索进行网页抓取
问题描述
我正在寻找一种在谷歌搜索中使用 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 上搜索尽可能多的网页。这可能有助于找到在谷歌上进行网络抓取的正确方法并讨论谷歌跟踪方式。
解决方案
也许你可以尝试这样的事情:
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)
}
推荐阅读
- reactjs - 使用 Webpack 解析模块失败
- swiftui - 在 SwiftUI 中无法推断通用参数标签
- python - 在 Homebrew 上的 python 2 支持结束后,在 Mac 上安装 python@2
- java - 在 Eclipse 中运行 Spring Boot 应用程序时出现带有分段错误的未处理异常
- c - 我可以在 C 中使用指针作为获取的参数吗?
- html - Bootsrap 固定导航栏没有边距底部
- vuejs2 - 如何清空 Vuex 存储模块状态对象?
- flutter - onBackgroundMessage 打开指定页面
- java - 如何在Java中将字符串表示为二叉树?
- visual-studio-code - 如何使用gnu格式样式格式化vscode中的c代码?