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?