Go和JavaScript结合使用:抓取网页中的图像链接

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: Go和JavaScript结合使用:抓取网页中的图像链接

前言
在当今数字化时代,数据是金钱的源泉,对于许多项目和应用程序来说,获取并利用互联网上的数据是至关重要的。其中之一的需求场景是从网页中抓取图片链接,这在各种项目中都有广泛应用,特别是在动漫类图片收集项目中。
需求场景:动漫类图片的项目需求
假设我们正在开发一个动漫类图片收集项目,我们需要从百度图片搜索结果中获取相关图片的链接。这些链接将用于下载图像并建立我们的图片数据库。这个需求背景可以应用于各种领域,从艺术研究到娱乐资讯。
Go和JavaScript结合优点
Go和JavaScript结合使用具有多个优点,尤其适用于网页内容的抓取和解析任务:

  1. 并发处理:Go是一门强大的并发编程语言,能够轻松处理多个HTTP请求,从而提高抓取速度。
  2. JavaScript处理:JavaScript在网页加载后可以修改DOM(文档对象模型),这对于抓取那些通过JavaScript动态加载的图像链接非常有用。
  3. 丰富的库支持:Go和JavaScript都有丰富的库和工具生态系统,可以轻松解决各种问题。
  4. 性能和效率:Go以其高效的性能而闻名,JavaScript则是Web前端的标配,两者结合可以在爬取任务中取得理想的效果。

反爬应对策略
在进行网络爬取时,常常会遇到反爬机制,这些机制旨在保护网站免受不合法的数据采集。以下是应对反爬机制的策略:

  1. 使用代理:配置代理服务器,隐藏您的真实IP地址,降低被封禁的风险。在完整爬取代码中,我们将使用以下代理信息:
  2. 模拟用户行为:通过设置合法的用户代理(User-Agent)头,使请求看起来像是由真实的浏览器发出的,而不是爬虫。
  3. 限速:避免过于频繁的请求,通过添加延迟或使用定时器来控制爬取速度,以减少被检测到的风险。
  4. 处理验证码和登录:某些网站可能会要求用户输入验证码或进行登录才能访问内容,需要相应的代码来处理这些情况。

爬取流程
爬取流程可以分为以下步骤:

  1. 使用Go发送HTTP请求,获取百度图片搜索结果页面的HTML内容。
  2. 使用JavaScript解析页面,提取图像链接。

下面是爬取流程的详细描述:
步骤1:发送HTTP请求
首先,我们使用Go来发送HTTP请求,以获取百度图片搜索结果页面的HTML内容。这里使用Go标准库的net/http包来实现,同时配置代理信息:

proxyPort := "5445"
proxyUser := "16QMSOML"
proxyPass := "280651"

proxyUrl := fmt.Sprintf("http://%s:%s@%s:%s", proxyUser, proxyPass, proxyHost, proxyPort)
proxy := func(_ *http.Request) (*url.URL, error) {
    return url.Parse(proxyUrl)
}

transport := &http.Transport{
    Proxy: proxy,
}

client := &http.Client{
    Transport: transport,
}

url := "https: //www.baidu.com/images/search?q=anime"
resp, err := client.Get(url)
defer resp.Body.Close()

if err != nil {
    log.Fatal(err)
}

body, err := ioutil.ReadAll(resp.Body)

if err != nil {
    log.Fatal(err)
}

// 此时,body中包含了百度图片搜索结果页面的HTML内容

步骤2:使用JavaScript解析页面
在这一步骤中,我们使用一个Go库,例如github.com/rogchap/v8go,来执行JavaScript代码并解析页面。以下是一个示例代码片段,演示如何使用JavaScript来提取图像链接:

_, _ = ctx.RunScript(`
    var images = document.querySelectorAll('img');
    var imageLinks = [];
    for (var i = 0; i < images.length; i++) {
        var src = images[i].src;
        imageLinks.push(src);
    }
    imageLinks;
`, "getImages.js")

result, _ := ctx.RunScript("getImages();", "getImagesCaller.js")
imageLinks, _ := result.ToSlice()

// 现在,imageLinks中包含了从页面中提取的图像链接

总结
最后,通过将抓取的图像链接用于下载图像,您可以建立您的动漫图片收集项目。请注意,此示例中的代码仅用于演示目的,实际项目中可能需要更多的功能和改进。

相关文章
|
2月前
|
存储 JavaScript 前端开发
使用JavaScript构建动态交互式网页:从基础到实践
【10月更文挑战第12天】使用JavaScript构建动态交互式网页:从基础到实践
119 1
|
3月前
|
编解码 前端开发 JavaScript
javascript检测网页缩放演示代码
javascript检测网页缩放演示代码
|
19天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
28 5
|
1月前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
24 2
|
2月前
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
27 1
【JavaScript】网页交互的灵魂舞者
|
2月前
|
Web App开发 缓存 前端开发
前端RAG:使用Transformers.js手搓纯网页版RAG(二)- 基于qwen1.5-0.5B
本文继续探讨了RAG的后半部分,通过在浏览器中运行qwen1.5-0.5B模型实现了增强搜索全流程。然而,由于浏览器与模型性能限制,该方案更适合研究、离线及高隐私场景。文章提供了完整的前端代码,让读者能够动手尝试。此外,详细介绍了代码框架、知识库准备、模型初始化及问答实现等步骤,并展示了实际运行效果。受限于当前技术,除非在离线或高隐私环境下,网页大模型的应用仍需进一步优化。
|
2月前
|
存储 自然语言处理 文字识别
纯前端RAG:使用Transformers.js实现纯网页版RAG(一)
本文将分两部分教大家如何在网页中实现一个RAG系统,本文聚焦于深度搜索功能。通过浏览器端本地执行模型,可实现文本相似度计算和问答匹配,无需依赖服务器。RAG搜索基于高维向量空间,即使不完全匹配也能找到意义相近的结果。文中详细介绍了如何构建知识库、初始化配置、向量存储及相似度计算,并展示了实际应用效果。适用于列表搜索、功能导航、文档查询及表单填写等多种场景。
232 0
|
2月前
|
Linux 编译器 Go
cgo--在Go中链接外部C库
cgo--在Go中链接外部C库
|
7天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
20 7
|
7天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。