
VUE3.0을 빠르게 시작하는 방법: 학습 시작
안녕하세요 여러분, 저는 Xiaoma입니다. 왜 그렇게 많은 사진을 다운로드해야 합니까? 며칠 전 uni-app + uniCloud를 사용하여 배경화면 애플릿을 무료로 배포했습니다. 그런 다음 애플릿의 콘텐츠를 채우려면 몇 가지 리소스가 필요합니다.
먼저 프로젝트를 초기화하고 axios cheerio 합니다.
npm init -y && npm i axios Cherio
axios 웹 콘텐츠를 크롤링하는 데 사용됩니다. cheerio 는 서버 측에서 이미지 주소를 가져오는 데 사용됩니다. 돔;
const 축 = 요구('축')
const Cherio = require('cheerio')
함수 getImageUrl(target_url, 컨테이너Eelment) {
결과_목록 = []로 설정
const res = axios.get(target_url)을 기다립니다.
const html = res.data
const $=cherio.load(html)
const 결과_목록 = []
$(containerEelment).each((요소) => {
result_list.push($(element).find('img').attr('src'))
})
결과_목록 반환
} 이런 방식으로 페이지에서 이미지 URL을 얻을 수 있습니다. 다음으로 URL에 따라 이미지를 다운로드해야 합니다.
방법 1: 내장 모듈 'https' 및 'fs' 사용
nodejs를 사용하여 파일을 다운로드하는 것은 내장 패키지 또는 타사 라이브러리를 사용하여 수행할 수 있습니다.
GET 메서드는 HTTPS와 함께 다운로드할 파일을 가져오는 데 사용됩니다. createWriteStream() 쓰기 가능한 스트림을 생성하는 데 사용되는 메서드입니다. 파일이 저장되는 위치인 하나의 매개 변수만 받습니다. Pipe() 는 읽기 가능한 스트림에서 데이터를 읽고 쓰기 가능한 스트림에 쓰는 메서드입니다.
const fs = 요구('fs')
const https = 요구('https')
//이미지 URL
const url = 'GFG.jpeg'
https.get(url, (res) => {
// 이미지는 이 경로에 저장됩니다.
const 경로 = `${__dirname}/files/img.jpeg`
const filePath = fs.createWriteStream(경로)
res.pipe(파일 경로)
filePath.on('마침', () => {
파일 경로.닫기()
console.log('다운로드 완료')
})
}) 방법 2: DownloadHelper
npm install node-downloader-helper
다음은 웹사이트에서 이미지를 다운로드하는 코드입니다.
dl 객체는두 개의 매개변수를 받는 DownloadHelper 클래스에 의해 생성됩니다
.File 변수에는 다운로드할 이미지의 URL이 포함되고, filePath 변수에는 저장될 파일의 경로가 포함됩니다.
const { DownloaderHelper } = require('node-downloader-helper')
//이미지 URL
const 파일 = 'GFG.jpeg'
//이미지가 다운로드될 경로
const 파일 경로 = `${__dirname}/files`
const dl = 새로운 DownloaderHelper(파일, 파일 경로)
dl.on('end', () => console.log('다운로드 완료'))
dl.start() 방법 3: 다운로드 사용
npm master sindresorhus가 작성했습니다.
npm install download
다음은 웹사이트에서 이미지를 다운로드하는 코드입니다. 다운로드 기능은 파일과 파일 경로를 받습니다.
const 다운로드 = 필요('다운로드')
// 이미지의 URL
const 파일 = 'GFG.jpeg'
// 이미지가 다운로드될 경로
const 파일 경로 = `${__dirname}/files`
download(파일, 파일 경로).then(() => {
console.log('다운로드 완료')
}) 원래 바이두 배경화면을 크롤링하려고 했으나 해상도가 부족하고 워터마크 등이 있었습니다. 나중에 그룹의 친구가 API를 발견했는데, 이는 아마도 특정 모바일 APP의 고화질 배경화면이었을 것입니다. , 직접 사용할 수 있습니다. 다운로드 URL을 얻은 후 직접 사용했습니다.
다음은 전체 코드입니다.
const download = require('download')
const 축 = require('축')
헤더 = {
'사용자 에이전트':
'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',
}
함수 sleep(시간) {
새로운 Promise((reslove) => setTimeout(reslove, time)) 반환
}
비동기 함수 로드(건너뛰기 = 0) {
const 데이터 = 액시오스 대기
.얻다(
'http://service.picasso.adesk.com/v1/vertical/category/4e4d610cdf714d2966000000/vertical',
{
헤더,
매개변수: {
Limit: 30, // 페이지당 30개의 항목 반환을 수정했습니다. 건너뛰기: 건너뛰기,
첫 번째: 0,
주문 : '뜨거운',
},
}
)
.then((res) => {
res.data.res.vertical을 반환합니다.
})
.catch((err) => {
console.log(err)
})
다운로드파일(데이터) 대기
잠을 기다리다(3000)
if (건너뛰기 < 1000) {
로드(건너뛰기 + 30)
} 또 다른 {
console.log('다운로드 완료')
}
}
비동기 함수 downloadFile(data) {
for (let index = 0; index < data.length; index++) {
const 항목 = 데이터[색인]
// 이미지가 다운로드될 경로
const 파일 경로 = `${__dirname}/beauty`
다운로드 대기(item.wp, filePath, {
파일 이름: item.id + '.jpeg',
헤더,
}).then(() => {
console.log(`${item.id} 다운로드 완료`)
반품
})
}
}
위의 load()코드에서는
먼저 User-Agent 설정하고 3초 지연을 설정해야 서버가 크롤러를 차단하고 403을 직접 반환하는 것을 방지할 수 있습니다.
node index.js 사용하면 이미지가 자동으로 다운로드됩니다.
,
" 수박갤러리 "의 위챗 미니프로그램 검색체험을
https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.awebp?