node 没有界面的浏览器_node.js爬虫入门(二)爬取动态页面(puppeteer)
之前第一篇爬虫教程node.js爬虫入门(一)爬取静态页面讲解了静态网页的爬取,十分简单,但是遇到一些动态网页(ajax)的话,直接用之前的方法发送请求就无法获得我们想要的数据。这时就需要通过爬取动态网页的方法,selenium和puppeteer都不错。
这里推荐使用puppeteer,不为别的,只因为他是谷歌亲生的,一直在维护更新。下面是翻译的官方文档介绍
Puppeteer 是一个提供一系列高级接口通过 DevTools(开发者工具)协议去控制 Chrome 或者 Chromium(谷歌开源)的 Node 库。它默认运行无头模式(没有浏览器的UI界面),通过配置也可以运行正常模式。
它能用来:
- 网页截图和导出PDF
- 爬取SPA和SSR网站
- 自动化表单提交、界面测试、键盘输入等
- 创建一个最新的自动化测试环境,直接使用最新的chrome版本和JS特性进行测试
- 捕获网站的时间线轨迹用以帮助诊断性能问题
- 测试谷歌浏览器的扩展程序
首先我们还要先安装再使用,默认安装的时候会附带下载一个最新的Chromium,300M左右大小。
npm install puppeteer
如果你本机已经有较新版本的chrome,那么可以仅安装核心版本,但是启动puppeteer的时候要配置本地chrome的路径。
npm install puppeteer-core // 核心版本
假设我们现在要爬取拉勾网前端招聘信息,这个是动态页面,使用这个例子下面来尝试爬取。
因为chrome操作全是异步操作,为了避免回调地狱,推荐使用es7的async await,这种语法可读性高,官方文档也是如此。
- 首先使用puppeteer启动浏览器并打开该动态页面
需要注意这里如果是使用本地浏览器的话则需要在启动浏览器配置中传入本地chrome路径
const browser = await puppeteer.launch({executablePath: 'C:/Users/Administrator/AppData/Local/Google/Chrome/Application/chrome.exe'
})
- 在chrome环境中执行函数,以获取所需的数据,然后返回给node的执行环境
上图可以看到我们所需数据的dom位置,chrome环境执行的函数中我们要获取并组织所需的数据。
let list = document.querySelectorAll('.s_position_list .item_con_list li')
let res = []
for (let i = 0; i < list.length; i++) {res.push({name: list[i].getAttribute('data-positionname'),company: list[i].getAttribute('data-company'),salary: list[i].getAttribute('data-salary'),require: list[i].querySelector('.li_b_l').childNodes[4].textContent.replace(/ |n/g, ''),})
}
return res
这里有个调试小技巧,获取数据的函数我们可以直接在chrome的控制台中写,以便于调试
最后附上完整的代码
const puppeteer = require('puppeteer');(async () => {// 启动浏览器const browser = await puppeteer.launch({headless: false, // 默认是无头模式,这里为了示范所以使用正常模式})// 控制浏览器打开新标签页面const page = await browser.newPage()// 在新标签中打开要爬取的网页await page.goto('https://www.lagou.com/jobs/list_web%E5%89%8D%E7%AB%AF?px=new&city=%E5%B9%BF%E5%B7%9E')// 使用evaluate方法在浏览器中执行传入函数(完全的浏览器环境,所以函数内可以直接使用window、document等所有对象和方法)let data = await page.evaluate(() => {let list = document.querySelectorAll('.s_position_list .item_con_list li')let res = []for (let i = 0; i < list.length; i++) {res.push({name: list[i].getAttribute('data-positionname'),company: list[i].getAttribute('data-company'),salary: list[i].getAttribute('data-salary'),require: list[i].querySelector('.li_b_l').childNodes[4].textContent.replace(/ |n/g, ''),})}return res})console.log(data)
})()
运行结果
到这里动态网页的爬取也完成了,但是puppeteer功能远不止于此,它还有很多强大API可以使用。可以移步官方文档。
第三期会讲讲怎么定时执行爬虫并进行数据库存储。
node 没有界面的浏览器_node.js爬虫入门(二)爬取动态页面(puppeteer)相关推荐
- Python 爬虫入门(二)——爬取妹子图
Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...
- python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图
Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. 公众号:[智能制造社区].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会 ...
- Python爬虫入门(爬取豆瓣电影信息小结)
Python爬虫入门(爬取豆瓣电影信息小结) 1.爬虫概念 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或脚本.爬虫的本质是模拟浏览器打开网页,获取网页中我们想要的那部分数据. 2.基本流程 ...
- python爬虫-爬妹子图_Python 爬虫入门之爬取妹子图
Python 爬虫入门之爬取妹子图 来源:李英杰 链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...
- Python爬虫入门 | 4 爬取豆瓣TOP250图书信息
先来看看页面长啥样的:https://book.douban.com/top250 我们将要爬取哪些信息:书名.链接.评分.一句话评价-- 1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...
- python 爬虫入门--文字爬取
python 爬虫入门–文字爬取 对于爬虫,相信大家都不陌生,但是如何入门,大家还是停留在了解认知阶段吗?那可以试试下边的方法,一起来试一下. 首先我们试试爬取网页中的***文本信息*** 使用的是我 ...
- Python爬虫入门 | 5 爬取小猪短租租房信息
小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 小猪短租(成都)页面:http://cd.xiaozhu.com/ 1.爬取租房标题 ...
- python爬虫入门(一)爬取钓鱼吧
python爬虫入门(一)爬取钓鱼吧 # Date : 2022/1/1 17:11 ''' 需求:1.输入贴吧名称:钓鱼吧https://tieba.baidu.com/f?kw=钓鱼吧&p ...
- python爬虫怎么爬同一个网站的多页数据-请问爬虫如何爬取动态页面的内容?
现在网页大多是动态网页,尤其是内容丰富,值得爬取的网站,几乎无一例外是动态的,比如狗东.淘宝和知乎,而且还有不少反爬手段,这些都大大提升了爬虫难度,尤其是淘宝,为了反爬不惜影响到正常用户使用. 面对这 ...
最新文章
- Delphi通过ICMP检测与远程主机连接
- 重构机房收费系统(一)
- 城市轨道交通运营票务管理论文_城市轨道交通运营管理专业就业前景怎么样?中职优选告诉你...
- 黑马程序员——java语言基础——面向对象
- CompletableFuture详解~getNow
- linux系统加固建议
- 【云栖大会】阿里云未来走势 看当家的怎么说?
- MySQL反斜杠 ‘\\‘ 插入数据库丢失
- Js中apply和Math.max()函数的问题及区别
- 游戏策划学习:moba分路思考
- 2017年真题精选(六)
- 问题 E: 【贪心】雷达问题
- 港科夜闻|罗康锦教授获委任为香港科大工学院院长
- js实现时间每秒更新
- win10:如何在注册表中操作右键菜单
- 在Ubuntu中运行.exe程序
- 我的世界四大微软签约服务器,一年吸纳1.5亿用户,《我的世界》宣布开启“阴阳师”等四大IP联动 - 全文...
- 杰克马,请问有钱就是好人吗?
- Java定时任务手工触发-使用Arthas
- k型热电偶材料_k型热电偶补偿导线材质
热门文章
- secureCRT配置ssh -x
- 如何把winPE装到硬盘隐藏起来
- [pytorch ] (a) must be greater or equal to the number of dimensions (b)
- 惊了!Chrome浏览器竟然自带的一款恐龙游戏【免下载】
- linux常用命令(1)帮助命令man使用
- Java 源码中 unchecked 什么意思
- scrapy爬取百万小说
- reactjs ref属性:字符串类型的ref和createRef
- linux (fedora ubuntu centos) thunderbird雷鸟配置腾讯企业邮箱
- Maven settings.xml配置Nexus