当前位置: 首页 > news >正文

使用 Puppeteer 快速上手 Node.js 爬虫

使用 Puppeteer 库通过自动化浏览器来访问百度图片搜索,并在搜索结果中下载图片。代码分为两部分:

  1. 自动化浏览器任务:使用 Puppeteer 浏览百度图片搜索并获取图片 URL。
  2. 图片下载:检查图片 URL 类型(base64 或 URL),并保存图片到本地。

如果无法通过npm安装:

确保 Puppeteer 的下载地址已经指向淘宝镜像
set PUPPETEER_DOWNLOAD_HOST=https://npmmirror.com/mirrors 

示例: 

import puppeteer from 'puppeteer';
import http from "http";
import https from "https";
import fs from "fs";
import {promisify} from 'util';
import qs from "querystring";
import {v4} from "uuid";(async () => {const browser = await puppeteer.launch({headless: false, // 打开浏览器browser: "chrome",slowMo: 250, // slow down by 250ms// executablePath:'', // 其它浏览器打开地址});const page = await browser.newPage();await page.goto('https://image.baidu.com/');console.log('goto: https://image.baidu.com/');await page.setViewport({width: 1920, height: 1080});let count = 0;while (count < 60) {try {await page.focus('[name="word"]');break;} catch (err) {count++;await page.reload();console.log('[name="word"] selector not found, try again');}}// 通过属性获取指定input,填入搜索框文字await page.keyboard.sendCharacter('卡皮巴拉');// 等于上面两条 page.focus page.keyboard.sendCharacter// await page.type('#kw', '卡皮巴拉', { delay: 100 });await page.click('.submit-btn_ZmEXZ');// await page.reload();page.on('load', async () => {console.log('page loaded!');await page.waitForSelector('.main_img');// evaluate 中会在浏览器端运行js代码。const src = await page.evaluate(() => {const images = document.querySelectorAll('.main_img');// 在puppeteer打开的浏览器查看console.log(images);// return images.map(img => img.src);return Array.prototype.map.call(images, img => img.src);});await Promise.all(src.map(src => {console.log(src);return downloadImage(src, './image/p1/');}));await page.screenshot({path: './screenshot.png',});await browser.close();});
})();const urlToImage = (url, dir, callback) => {const mod = /^https:/.test(url) ? https : http;const ext = qs.parse(url).f.split('?').shift().toLowerCase().replace('jpeg', 'jpg');const file = `${dir}${v4()}.${ext}`;return new Promise((resolve, reject) => {mod.get(url, res => {// 使用 fs.createWriteStream 创建文件流const writeStream = fs.createWriteStream(file);// 将响应数据流管道到文件写入流res.pipe(writeStream);// 在写入完成时调用回调writeStream.on('finish', () => {console.log(file);resolve();});});});
};const base64ToImage = async (base64, dir) => {try {const matches = base64.match(/^data:(.+?);base64,(.+)$/);const ext = matches[1].split('/')[1].replace('jpeg', 'jpg');const file = `${dir}${v4()}.${ext}`;await promisify(fs.writeFile)(file, matches[2], 'base64');} catch (err) {console.log(err);}
}async function downloadImage(src, dir) {if (/data:(.+?);base64,(.+)/.test(src)) {await base64ToImage(src, dir);} else if (src.startsWith('http')) {await urlToImage(src, dir);} else {console.log('[error] download fail, unsupported image type!', src);}
}

相关文章:

使用 Puppeteer 快速上手 Node.js 爬虫

使用 Puppeteer 库通过自动化浏览器来访问百度图片搜索&#xff0c;并在搜索结果中下载图片。代码分为两部分&#xff1a; 自动化浏览器任务&#xff1a;使用 Puppeteer 浏览百度图片搜索并获取图片 URL。图片下载&#xff1a;检查图片 URL 类型&#xff08;base64 或 URL&…...

浏览器的跨域问题与解决方案

浏览器的跨域问题与解决方案 浏览器的跨域问题源于同源策略&#xff08;Same-Origin Policy&#xff09;这一安全机制。同源策略要求两个页面具有相同的协议、域名和端口号&#xff0c;才能相互访问资源和数据。这一机制旨在防止恶意网站执行跨站脚本攻击&#xff0c;从而保护…...

MyBatis一二级缓存的区别?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis一二级缓存的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis一二级缓存的区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 的缓存机制分为 一级缓存 和 二级缓存&…...

[2024-12 CISCN 长城杯] Crypto

fffffhash 【也可以看这题&#xff0c;一样的&#xff1a;https://github.com/DownUnderCTF/Challenges_2023_Public/blob/main/crypto/fnv/solve/solution_joseph_LLL.sage】 题目描述&#xff1a; import os from Crypto.Util.number import * def giaogiao(hex_string):b…...

pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构&#xff1a; ![title](sources/bilstm.png) pytorch bilstm crf的教程&#xff0c;注意 这里不支持批处理 Python version…...

Python毕业设计选题:基于django+vue的疫情数据可视化分析系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 员工管理 疫情信息管理 检测预约管理 检测结果…...

tomcat被检测到目标URL存在htp host头攻击漏洞

AI越来越火了,我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站 Tomcat被检测到目标URL存在http host头攻击漏洞,这个漏洞复现一下就是黑客访问你的网站,之后中修改请求头中的host属…...

1.初识python

文章目录 1.python背景知识2.python优缺点3.为什么要学习python 大家好&#xff0c;我是晓星航。今天为大家带来的是初识python 相关的讲解&#xff01;&#x1f600; 1.python背景知识 我们学习python需要做的事情&#xff1a; 1.python 环境搭建 2.python 基础语法 3.pyth…...

【密码学】ZUC祖冲之算法

一、ZUC算法简介 ZUC算法&#xff08;祖冲之算法&#xff09;是中国自主研发的一种流密码算法&#xff0c;2011年被3GPP批准成为4G国际标准&#xff0c;主要用于无线通信的加密和完整性保护。ZUC算法在逻辑上采用三层结构设计&#xff0c;包括线性反馈移位寄存器&#xff08;L…...

Python面试常见问题及答案8

一、基础部分 问题1&#xff1a; 解释Python中的切片&#xff08;slicing&#xff09;操作在列表、字符串上是如何工作的&#xff1f; 答案&#xff1a; 在列表和字符串中&#xff0c;切片操作可以获取其中的一部分元素。切片的语法是[start:stop:step]。 对于列表&#xff0…...

ASP.net Core EntityFramework Code EF code 汇总

Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多&#xff0c;全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去&#xff0c;每个类创建一个实体模型 public class BookConfiguration &#xff1a;IEntityT…...

u3d动画系统五【StateMachineBehaviour类】

一.StateMachineBehaviour概述 状态机行为是一类特殊脚本。与将常规 Unity 脚本 (MonoBehaviour) 附加到单个游戏对象类似&#xff0c;您可以将 StateMachineBehaviour 脚本附加到状态机中的单个状态。因此可编写一些将在状态机进入、退出或保持在特定状态时执行的代码。这意味…...

IS-IS协议

IS-IS协议介绍 IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;协议是一种链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在同一个自治系统&#xff08;Autonomous System, AS&#xff09;内部的路由器之间交换路由信息。IS-I…...

使用C++实现RSA加密解密

一&#xff0c;RSA简介。 RSA&#xff0c;一种非对称加密方式。是目前为止最有影响力的加密算法之一&#xff0c;而且是第一个同时应用于加密和数字签名的算法。 其原理为&#xff1a;两个大素数相乘容易&#xff0c;但是若想将两个大素数相乘的积再分解为两个原始的素数很难…...

C++归并与快速

快排 #include<bits/stdc.h> #include<algorithm> using namespace std; void f(int,int); void cl(int,int,int); void q(int,int); int a[211]; int n; int main(){cin>>n;for(int i0;i<n;i){cin>>a[i];}q(0,n-1);for(int i0;i<n;i){cout<…...

金蝶云苍穹踩过的坑(慢慢更新)

IDEA不能用最新版&#xff0c;不然搜不到金蝶的插件。 我用的是2024.1.7/2023.1.7 IDEA里增加金蝶插件库的地址也变了&#xff0c;现在是 https://tool.kingdee.com/kddt/idea-updatePlugins.xml 金蝶云苍穹部署在服务器 MAC本地IDEA调试的时候&#xff0c;登录N次能成功一次…...

AndroidStudio——安卓项目结构与文件介绍

一、AndroidStudio界面 一个安卓项目界面主要由以下几部分组成&#xff1a; 1.菜单栏&#xff1a;位于顶部&#xff0c;基本的各项菜单操作 2.项目结构&#xff1a;通常位于左侧&#xff0c;展示当前项目的目录结构 3.编辑窗口&#xff1a;通常位于中间&#xff0c;可以用于编…...

华为自反ACL实验

一、实验背景 做这个实验的原因是最近公司里上了三台小程序服务器&#xff0c;由于三台服务器的端口都映射出去了&#xff0c;领导要求A网段的三台服务器不能访问内网B&#xff0c;C网段&#xff0c;同时B、C网段内网用户可以访问A段的94、95、96服务器&#xff1b; 也就是PC4\…...

yml和xml分别代表什么

YML 和 XML 是两种不同的数据序列化格式&#xff0c;它们在软件开发和数据交换中有着广泛的应用&#xff1a; YAML (YAML Ain’t Markup Language): YAML 是一种用于数据序列化的人类可读语言。它被设计为易于阅读和编写&#xff0c;特别适合于配置文件。YAML 使用缩进来表示数…...

Qt多线程编程

在Qt中&#xff0c;多线程编程是一个常见的需求&#xff0c;特别是当你需要执行耗时的后台任务而不希望阻塞用户界面时。多线程编程它允许应用程序同时执行多个任务&#xff0c;从而提高性能和响应速度。Qt提供了一套完善的多线程支持&#xff0c;包括线程类&#xff08;QThrea…...

造相-Z-Image-Turbo亚洲LoRA WebUI教程:多分辨率适配(768x1024/1024x1024)

造相-Z-Image-Turbo亚洲LoRA WebUI教程&#xff1a;多分辨率适配&#xff08;768x1024/1024x1024&#xff09; 提示&#xff1a;本文介绍的镜像已预装所有依赖和环境&#xff0c;开箱即用&#xff0c;无需手动配置 1. 开篇&#xff1a;为什么需要这个工具&#xff1f; 如果你正…...

开源AI图像工作站落地:Pixel Fashion Atelier在数字藏品中的应用

开源AI图像工作站落地&#xff1a;Pixel Fashion Atelier在数字藏品中的应用 1. 项目概述 Pixel Fashion Atelier&#xff08;像素时装锻造坊&#xff09;是一款基于Stable Diffusion与Anything-v5的开源图像生成工作站。与传统AI工具不同&#xff0c;它采用了复古日系RPG的&…...

OpenClaw安全实践:gemma-3-12b-it本地化保障敏感数据边界

OpenClaw安全实践&#xff1a;gemma-3-12b-it本地化保障敏感数据边界 1. 为什么需要本地化部署&#xff1f; 去年处理季度财报时&#xff0c;我犯过一个至今心有余悸的错误。当时用某公有云API自动分析Excel中的财务数据&#xff0c;结果在调试时不小心把包含客户银行账号的测…...

OpenClaw本地化优势:Qwen3-14b_int4_awq模型数据安全实践

OpenClaw本地化优势&#xff1a;Qwen3-14b_int4_awq模型数据安全实践 1. 为什么选择本地化部署 去年我在处理一批客户调研数据时&#xff0c;遇到了一个棘手问题——调研报告包含大量敏感信息&#xff0c;但团队需要AI辅助分析。当时尝试了几个云端方案&#xff0c;要么因为数…...

从COX分析到预后模型:如何用R筛选关键基因并画出发表级森林图?

从COX分析到预后模型&#xff1a;如何用R筛选关键基因并画出发表级森林图&#xff1f; 在生物信息学研究中&#xff0c;COX比例风险模型是分析基因与患者生存关系的重要工具。但许多研究者在完成初步分析后常陷入困惑&#xff1a;面对数十个候选基因&#xff0c;如何筛选真正有…...

SEO网站推广的长期效果如何_SEO网站推广对网站优化有什么要求

SEO网站推广的长期效果如何 在当今互联网时代&#xff0c;SEO网站推广已经成为提升网站流量和品牌知名度的关键手段。SEO&#xff0c;即搜索引擎优化&#xff0c;通过优化网站结构、内容和外部链接&#xff0c;提高网站在搜索引擎结果页面&#xff08;SERP&#xff09;中的排名…...

从开发到安全:SpringBoot/Struts2/Laravel框架那些“第三方组件”挖出的坑,你的项目踩中了吗?

第三方组件安全黑洞&#xff1a;主流开发框架中那些被忽视的高危依赖 当我们在讨论框架安全时&#xff0c;往往聚焦于SpringBoot、Laravel等核心框架本身&#xff0c;却忽略了那些如影随形的第三方组件。这些"搭便车"的依赖项&#xff0c;正成为企业应用安全的阿喀琉…...

从空调到电动车:拆解NTC和PTC热敏电阻在你身边电子产品里的‘隐藏任务’

从空调到电动车&#xff1a;拆解NTC和PTC热敏电阻在你身边电子产品里的‘隐藏任务’ 你有没有想过&#xff0c;为什么手机快充时充电头不会烫到冒烟&#xff1f;汽车座椅加热为什么不会越坐越烫&#xff1f;这些看似简单的日常体验背后&#xff0c;其实都藏着一对神奇的电子元件…...

基于Python的电影订票系统毕业设计源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于Python的电影订票系统&#xff0c;以满足现代观众对于便捷、高效电影购票服务的需求。具体研究目的如下&#xff1a; 首先&#xf…...

Pixel Aurora Engine惊艳案例:用单句描述生成完整RPG角色设定+立绘+装备图

Pixel Aurora Engine惊艳案例&#xff1a;用单句描述生成完整RPG角色设定立绘装备图 1. 像素极光引擎简介 Pixel Aurora Engine是一款革命性的AI像素艺术生成工具&#xff0c;它将先进的扩散模型技术与复古游戏美学完美融合。这款工具最令人惊叹的能力在于&#xff1a;仅需一…...