网络上有无数的图片资源,但是如何从特定的网站中快速地抓取图片呢?本文将介绍一种使用 R 语言和 XML 库的简单方法,让你可以轻松地从 www.sohu.com 网站上下载你感兴趣的图片。本文将涉及以下几个方面:
无论您是想深入了解爬虫技术,还是需要解决实际问题,本文都将为您提供详细的指导和实用的技巧。
首先,我们需要安装 R 语言和所需的库。确保你已经安装了 R,然后执行以下命令安装 XML 库:
install.packages("XML")
接下来,我们编写一个 R 脚本,实现从 www.sohu.com 抓取图片的功能。以下是代码示例,这里的爬虫代理的设置仅作示例,您需要根据实际情况进行调整。
# 加载所需库
library(XML)
library(httr)
library(foreach)
library(doParallel)
# 爬虫代理 设置IP信息
proxy <- list(
http = "http://www.18XXXX.cn:36986:user:pass",
https = "http://www.18XXXX.cn:36986:user:pass"
)
# 设置目标网址
url <- "https://www.sohu.com"
# 获取页面内容的函数
get_page <- function(url) {
tryCatch({
response <- httr::GET(url, use_proxy(proxy))
content <- httr::content(response, as = "text")
return(content)
}, error = function(e) {
cat("Error fetching page:", conditionMessage(e), "\n")
return(NULL)
})
}
# 解析页面内容,提取图片链接
parse_page <- function(content) {
doc <- XML::htmlParse(content, useInternalNodes = TRUE)
img_nodes <- XML::getNodeSet(doc, "//img")
img_links <- sapply(img_nodes, function(node) XML::xmlGetAttr(node, "src"))
return(img_links)
}
# 多线程下载图片
download_images <- function(img_links) {
registerDoParallel(cores = 4) # 设置线程数
foreach(link = img_links, .combine = c) %dopar% {
tryCatch({
img <- httr::GET(link, use_proxy(proxy))
filename <- basename(link)
writeBin(content(img, "raw"), file.path("images", filename))
cat("Downloaded", filename, "\n")
}, error = function(e) {
cat("Error downloading image:", conditionMessage(e), "\n")
})
}
stopImplicitCluster()
}
# 主函数
main <- function() {
content <- get_page(url)
if (!is.null(content)) {
img_links <- parse_page(content)
if (length(img_links) > 0) {
dir.create("images", showWarnings = FALSE)
download_images(img_links)
} else {
cat("No images found on the page.\n")
}
} else {
cat("Failed to fetch page content.\n")
}
}
# 执行主函数
main()
请根据您的实际需求修改采集数据后的其他分析。祝您在爬虫之旅中顺利前行!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。