内容简介:利用空闲时间,学习了下puppeteer爬虫,我也想爬取下网上的资源正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯^_^)
利用空闲时间,学习了下puppeteer爬虫,我也想爬取下网上的资源
1.部分api
- puppeteer.launch(options)
| 参数名称 | 参数类型 | 参数说明 |
|---|---|---|
| ignoreHTTPSErrors | boolean | 在请求的过程中是否忽略 Https 报错信息,默认为 false |
| headless | boolean | 是否以“无头”的模式运行chrome,也就是不显示UI,默认为true |
| executablePath | string | 可执行文件的路径,Puppeteer 默认是使用它自带的 chrome webdriver, 如果你想指定一个自己的 webdriver 路径,可以通过这个参数设置 |
| slowMo | number | 使 Puppeteer 操作减速,单位是毫秒。如果你想看看 Puppeteer 的整个工作过程,这个参数将非常有用 |
| args | Array(String) | 传递给 chrome 实例的其他参数,比如你可以设置浏览器窗口大小 具体参数 |
| timeout | number | 等待chrome实例启动的最长时间,默认是3000ms,如果传入0,则不限制时间 |
| dumpio | boolean | 是否将浏览器锦程stdout和stderr导入到process.stdout和process.stderr中,默认为false |
| userDataDir | string | 设置用户数据目录,默认 linux 是在~/.config目录,window 默认在 C:Users{USER}AppDataLocalGoogleChromeUser Data, 其中 {USER} 代表当前登录的用户名 |
| env | Object | 指定对chromium可见的环境变量,默认为process.env |
| devtools | boolean | 是否为每个选项卡自动打开DevTools面板,这个选项只有当headless设置为false的时候有效 |
- browser对象 api
| 方法名 | 说明 |
|---|---|
| browser.close() | 返回一个promise对象,用于关闭浏览器 |
| browser.newPage() | 返回一个promise对象,创建一个page实例 |
- page对象
| 方法名 | 说明 |
|---|---|
| page.goto(url[, options]) | 返回一个promise对象,url是目标链接 |
| page.waitForSelector() | 等待某个选择器的元素加载之后,这个元素可以是异步加载的 |
| page.evaluate(pageFunction[,args]) | 返回一个可序列化的普通对象,pageFunction 表示要在页面执行的函数, args 表示传入给 pageFunction 的参数 |
2.爬取电影网站
const puppeteer = require('puppeteer');
/* 爬虫的目标链接地址: 豆瓣电影 */
const url = `https://movie.douban.com/tag/#/?sort=R&range=0,10&tags=`;
const sleep = time => new Promise(resolve => {
setTimeout(resolve, time);
});
(async () => {
console.log('crawler start to visit the target address');
/* dumpio 是否将浏览器进程stdout和stderr导入到process.stdout和process.stderr中 */
const browser = await puppeteer.launch({
args: ['--no-sandbox'],
dumpio: false
});
const page = await browser.newPage();
await page.goto(url, {
waitUntil: 'networkidle2'
});
await sleep(3000);
await page.waitForSelector('.more');
for(let i = 0; i < 1; i++) {
await sleep(3000);
await page.click('.more');
}
const result = await page.evaluate(() => {
let $ = window.$;
let nodeItems = $('.list-wp a');
let links = [];
/* 获取对应的元素节点 */
if(nodeItems.length >= 1) {
nodeItems.each((index, item) => {
let elem = $(item);
let movieId = elem.find('div').data('id');
let title = elem.find('.title').text();
let rate = Number(elem.find('.rate').text());
let poster = elem.find('img').attr('src').replace('s_ratio_poster','l_ratio_poster');
links.push({
movieId,
title,
rate,
poster,
})
})
}
return links;
});
browser.close();
console.log(result)
})();
3.爬取网站内容生成pdf文件
const puppeteer = require('puppeteer');
const url = 'https://cn.vuejs.org/v2/guide/';
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle0' });
/* 选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容 */
let pdfFilePath = './index.pdf';
/* 根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印 */
await page.pdf({
path: pdfFilePath,
format: 'A4',
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
browser.close();
})()
正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯^_^)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Programming in Java
Robert Sedgewick、Kevin Wayne / Addison-Wesley / 2007-7-27 / USD 89.00
By emphasizing the application of computer programming not only in success stories in the software industry but also in familiar scenarios in physical and biological science, engineering, and appli......一起来看看 《Introduction to Programming in Java》 这本书的介绍吧!