puppetter 是谷歌出的一个无头浏览器,可以用来写e2e单元测试,本文用来爬取美女图片。哈哈,其实爬取简单,上传cdn吃了好大的苦,阿里的oss上传小视频(豆瓣的预告片)一直给报错(用put,buffer,stream都试过,最后才发现是oss的超时时间是nodejs控制的,我一直以为是oss那边控制了超时时间6000ms)
献上我爬取的最好的一张美女图片

async function getWelfareImage (url) {
// 返回解析为Promise的浏览器
const browser = await puppeteer.launch()
// 返回新的页面对象
const page = await browser.newPage()
// 页面对象访问对应的url地址
await page.goto(url, {
waitUntil: 'networkidle2'
})
// 等待3000ms,等待浏览器的加载
await sleep(1000)
// 可以在page.evaluate的回调函数中访问浏览器对象,可以进行DOM操作
const urls = await page.evaluate(() => {
let ol = document.getElementsByClassName('commentlist')[0]
let imgs = ol.getElementsByTagName('img')
let url = []
for (let i = 0; i < imgs.length; i++) {
url.push(imgs[i].getAttribute("src"))
}
// 返回所有美女图的url地址数组
return url
})
const store = oss(config.ossconfig)
for (let i = 0; i < urls.length; i++) {
// request-promise,返回一个buffer对象
let fetchResult = await rp({url:urls[i], encoding:null});
// 通过buffer的方式上传到cdn
await store.put(`beauty/cp-${path.basename(urls[i])}`, fetchResult);
}
// 关闭无头浏览器
await browser.close()
}
getWelfareImage('http://jandan.net/ooxx')
cdn地址:http://iuap-tenat-market.oss-cn-beijing.aliyuncs.com/beauty/cp-0076BSS5ly1fw6wbx5318j30hs0qognc.jpg
注意:
在new oss()传入的对象中需重新改写超时时间agent、timeout,具体的可以看oss中源码。
{
accessKeyId: '***',
accessKeySecret: '***',
bucket: '***',
region: 'oss-cn-beijing',
agent: new AgentKeepAlive({
timeout: '30m',
}),
timeout: '30m'
}
同时,也做了一个node cli 上传cdn的工具包(ac-tools cdn),cdn功能只是其中一个。
链接地址 ac-tools
网友评论