실용적인 공유: nodejs를 사용하여 10,000개 이상의 이미지를 크롤링하고 다운로드합니다.
이 기사는 저자가 nodejs를 사용하여 10,000개 이상의 여동생 배경화면을 크롤링하는 방법을 볼 수 있는 node실제 경험을 공유할 것입니다. 모든 사람에게 도움이 되기를 바랍니다.
안녕하세요 여러분 저는 Xiaoma입니다. 왜 이렇게 많은 사진을 다운로드해야 하나요? 며칠 전 uni-app + uniCloud를 사용하여 배경화면 애플릿을 무료로 배포했습니다. 그런 다음 애플릿의 콘텐츠를 채우려면 몇 가지 리소스가 필요합니다.
이미지 크롤링
먼저 프로젝트를 초기화하고 axios
를 설치하면 cheerio
axios
和 cheerio
npm init -y && npm i axios cheerio
axios
用于爬取网页内容,cheerio
是服务端的 jquery api, 我们用它来获取 dom 中的图片地址;
const axios = require('axios') const cheerio = require('cheerio') function getImageUrl(target_url, containerEelment) { let result_list = [] const res = await axios.get(target_url) const html = res.data const $ = cheerio.load(html) const result_list = [] $(containerEelment).each((element) => { result_list.push($(element).find('img').attr('src')) }) return result_list }
这样就可以获取到页面中的图片 url 了。接下来需要根据 url 下载图片。
如何使用 nodejs 下载文件
方式一:使用内置模块 ‘https’ 和 ‘fs’
使用 nodejs 下载文件可以使用内置包或第三方库完成。
GET 方法用于 HTTPS 来获取要下载的文件。 createWriteStream()
是一个用于创建可写流的方法,它只接收一个参数,即文件保存的位置。Pipe()
是从可读流中读取数据并将其写入可写流的方法。
const fs = require('fs') const https = require('https') // URL of the image const url = 'GFG.jpeg' https.get(url, (res) => { // Image will be stored at this path const path = `${__dirname}/files/img.jpeg` const filePath = fs.createWriteStream(path) res.pipe(filePath) filePath.on('finish', () => { filePath.close() console.log('Download Completed') }) })
方式二:DownloadHelper
npm install node-downloader-helper
下面是从网站下载图片的代码。一个对象 dl 是由类 DownloadHelper 创建的,它接收两个参数:
- 将要下载的图像。
- 下载后必须保存图像的路径。
File 变量包含将要下载的图像的 URL,filePath 变量包含将要保存文件的路径。
const { DownloaderHelper } = require('node-downloader-helper') // URL of the image const file = 'GFG.jpeg' // Path at which image will be downloaded const filePath = `${__dirname}/files` const dl = new DownloaderHelper(file, filePath) dl.on('end', () => console.log('Download Completed')) dl.start()
方法三: 使用 download
是 npm 大神 sindresorhus 写的,非常好用
npm install download
下面是从网站下载图片的代码。下载函数接收文件和文件路径。
const download = require('download') // Url of the image const file = 'GFG.jpeg' // Path at which image will get downloaded const filePath = `${__dirname}/files` download(file, filePath).then(() => { console.log('Download Completed') })
最终代码
本来想去爬百度壁纸,但是清晰度不太够,而且还有水印等,后来, 群里有个小伙伴找到了一个 api,估计是某个手机 APP 上的高清壁纸,可以直接获得下载的 url,我就直接用了。
下面是完整代码
const download = require('download') const axios = require('axios') let headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36', } function sleep(time) { return new Promise((reslove) => setTimeout(reslove, time)) } async function load(skip = 0) { const data = await axios .get( 'http://service.picasso.adesk.com/v1/vertical/category/4e4d610cdf714d2966000000/vertical', { headers, params: { limit: 30, // 每页固定返回30条 skip: skip, first: 0, order: 'hot', }, } ) .then((res) => { return res.data.res.vertical }) .catch((err) => { console.log(err) }) await downloadFile(data) await sleep(3000) if (skip < 1000) { load(skip + 30) } else { console.log('下载完成') } } async function downloadFile(data) { for (let index = 0; index < data.length; index++) { const item = data[index] // Path at which image will get downloaded const filePath = `${__dirname}/美女` await download(item.wp, filePath, { filename: item.id + '.jpeg', headers, }).then(() => { console.log(`Download ${item.id} Completed`) return }) } } load()
上面代码中先要设置 User-Agent
并且设置 3s 延迟, 这样可以防止服务端阻止爬虫,直接返回 403。
直接 node index.js
rrreee
axios
가 웹 콘텐츠를 크롤링하는 데 사용됩니다. Cherio
는 서버 측의 jquery API입니다. 이를 사용하여 DOM에서 이미지 주소를 가져옵니다. rrreee이 방법으로 페이지에서 이미지 URL을 가져올 수 있습니다. 다음으로 URL에 따라 이미지를 다운로드해야 합니다.
nodejs를 사용하여 파일을 다운로드하는 방법
방법 1: 내장 모듈 'https' 및 ' fs'
nodejs
사용 내장 패키지나 타사 라이브러리를 사용하여 파일을 다운로드할 수 있습니다. GET 메서드는 HTTPS를 통해 다운로드할 파일을 가져오는 데 사용됩니다. createWriteStream()
은 쓰기 가능한 스트림을 생성하는 데 사용되는 메서드입니다. 이 메서드는 파일이 저장되는 위치인 하나의 매개변수만 받습니다. Pipe()
는 읽기 가능한 스트림에서 데이터를 읽고 쓰기 가능한 스트림에 쓰는 메서드입니다.
rrreee
rrreee🎜다음은 웹사이트에서 이미지를 다운로드하는 코드입니다. 객체 dl은 두 개의 매개변수를 받는 DownloadHelper 클래스에 의해 생성됩니다: 🎜nodejs
사용 내장 패키지나 타사 라이브러리를 사용하여 파일을 다운로드할 수 있습니다. GET 메서드는 HTTPS를 통해 다운로드할 파일을 가져오는 데 사용됩니다.createWriteStream()
은 쓰기 가능한 스트림을 생성하는 데 사용되는 메서드입니다. 이 메서드는 파일이 저장되는 위치인 하나의 매개변수만 받습니다. Pipe()
는 읽기 가능한 스트림에서 데이터를 읽고 쓰기 가능한 스트림에 쓰는 메서드입니다. - 다운로드할 이미지.
- 다운로드 후 이미지를 저장해야 하는 경로입니다.
최종 코드🎜🎜원래 바이두 배경화면 크롤링하려고 했는데 해상도가 부족하고 워터마크 등이 있어서 나중에 그룹에 있던 친구가 API를 발견했어요 , 모바일 APP에서 고화질 배경화면으로 추정되며, 다운로드 URL을 직접 얻을 수 있어 직접 이용하였습니다. 🎜🎜다음은 전체 코드입니다🎜rrreee🎜위 코드에서 먼저 User-Agent
를 설정하고 3초 지연을 설정해야 합니다. 이렇게 하면 서버가 크롤러를 차단하고 403을 직접 반환하는 것을 방지할 수 있습니다. 🎜🎜직접 node index.js
하면 이미지가 자동으로 다운로드됩니다. 🎜🎜🎜, 🎜🎜🎜experience🎜🎜🎜WeChat 애플릿 검색 "🎜Watermelon Gallery🎜" 경험. 🎜🎜https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.awebp?🎜🎜🎜노드 관련 지식을 더 보려면 다음을 방문하세요: 🎜nodej 초 튜토리얼🎜 ! 🎜
위 내용은 실용적인 공유: nodejs를 사용하여 10,000개 이상의 이미지를 크롤링하고 다운로드합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Node.js에는 LTS 버전과 현재 버전이 있습니다. 이 두 버전의 차이점은 무엇인가요? 다음 글은 Node.js 버전 간의 차이점을 빠르게 이해하고 적절한 버전을 선택하는 방법에 대해 이야기하는 데 도움이 될 것입니다.

Node.js는 단일 스레드 언어입니다. V8 엔진을 기반으로 개발되었습니다. V8은 원래 브라우저 측에서 JavaScript 언어를 구문 분석하고 실행하도록 설계되었습니다. 이 디자인은 일부를 방지합니다. 다중 스레드 상태 동기화 문제로 인해 더 가볍고 사용하기 쉬워졌습니다.

Node.js는 버전 관리를 어떻게 수행하나요? 다음 기사에서는 매우 실용적인 Node.js 버전 관리 도구 3가지를 공유하겠습니다. 이 도구가 도움이 되기를 바랍니다.

npm은 JavaScript 세계의 패키지 관리 도구이자 Node.js 플랫폼의 기본 패키지 관리 도구입니다. npm을 통해 코드를 설치, 공유, 배포하고 프로젝트 종속성을 관리할 수 있습니다. 이 글은 여러분에게 npm의 원칙을 안내할 것입니다. 여러분에게 도움이 되기를 바랍니다!

IDEA에서 노드를 실행하는 방법은 무엇입니까? 다음 글에서는 IDEA에서 node.js를 구성, 설치, 실행하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다!

Node.js는 비동기 리소스 컨텍스트 공유를 어떻게 구현합니까? 다음 기사에서는 Node가 비동기 리소스 컨텍스트 공유를 구현하는 방법을 소개합니다. 비동기 리소스 컨텍스트 공유의 사용에 대해 이야기해 보겠습니다. 모두에게 도움이 되기를 바랍니다.

이번 글은 Node.js의 fs 파일 모듈과 경로 모듈에 대해 알아보기 위해 파일 및 처리 경로를 읽고 쓰는 사례를 활용해 모든 분들께 도움이 되기를 바랍니다!

QR 코드는 생활 곳곳에 있습니다. 저는 이전에 Java의 zxing 라이브러리를 사용하여 QR 코드를 생성한 적이 있는데 매우 강력합니다. 하지만 실제로 nodejs에는 QR 코드를 생성할 수 있는 타사 라이브러리가 많이 있습니다. 오늘 우리는 qrcode 라이브러리를 사용하여 QR 코드를 생성합니다.
