来源:好完美 浏览次数: 发布时间:2022-06-02 11:13:28
本文适合有无爬虫和Node.js基础的朋友观看~
需要:
如果你是技术人员,那你可以看我下一篇文章,否则,请直接移到我的仓库,直接从文档中使用
仓库地址:有文档和源码,别忘了给个star
此要求中使用的技术:Node.js 和
小试一刀,爬取京东资源
const puppeteer = require('puppeteer'); // 引入依赖 (async () => { //使用async函数完美异步 const browser = await puppeteer.launch(); //打开新的浏览器 const page = await browser.newPage(); // 打开新的网页 await page.goto('https://www.jd.com/'); //前往里面 'url' 的网页 const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址 let arr = []; //这个箭头函数内部写处理的逻辑 const imgs = document.querySelectorAll('img'); imgs.forEach(function (item) { arr.push(item.src) }) return arr }); // '此时的result就是得到的爬虫数据,可以通过'fs'模块保存' })() 复制过去 使用命令行命令 ` node 文件名 ` 就可以运行获取爬虫数据了 这个 puppeteer 的包 ,其实是替我们开启了另一个浏览器,重新去开启网页,获取它们的数据。
跳转网页中所有标题的文本内容对应 中的所有标签,最后放入一个数组中。
browser.newPage(), browser.close() 是固定的写法。
调用这个方法。
也就是说我们可以先进入京东网页,处理完逻辑再调用page.goto函数完美代码 pdf,
注意上面所有的逻辑都是这个包帮我们在不可见的地方打开另一个包
然后浏览器处理逻辑,因此最终调用 .close() 方法来关闭该浏览器。
这时候我们对上一篇的代码进行优化,爬取对应的资源。
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://www.jd.com/'); const hrefArr = await page.evaluate(() => { let arr = []; const aNodes = document.querySelectorAll('.cate_menu_lk'); aNodes.forEach(function (item) { arr.push(item.href) }) return arr }); let arr = []; for (let i = 0; i < hrefArr.length; i++) { const url = hrefArr[i]; console.log(url) //这里可以打印 await page.goto(url); const result = await page.evaluate(() => { //这个方法内部console.log无效 return $('title').text(); //返回每个界面的title文字内容 }); arr.push(result) //每次循环给数组中添加对应的值 } console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地 await browser.close() })()
上面有一个天坑页面。函数内部的.log无法打印,外部变量内部无法获取,只能返回。
使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能用。这里由于
京东使用了所有的接口,所以我们可以使用它们。简而言之,他们开发了可用的选择器,我们都可以使用它们,否则我们不能。
接下来我们爬取Node.js的官网主页,直接生成PDF
不管你是否知道 Node.js 和爬虫人都可以操作,请仔细阅读本文档并按顺序执行每一步
本项目要求:给我们一个网页地址,爬取他的网页内容,然后输出成我们想要的PDF格式文档,请注意是高质量的PDF文档
TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次爬取单个页面,请将index.pdf复制出来,然后继续改url地址,继续爬取,生成一个新的 PDF 文件。当然,你也可以通过循环编译的方式一次爬取多个网页生成多个PDF文件。
对于像京东首页这样开启了图片延迟加载的网页,部分爬取的内容是状态内容。对于有一些反爬机制的网页,爬虫也会有问题,但是大部分网站都可以。
const puppeteer = require('puppeteer'); const url = require('./url'); (async () => { const browser = await puppeteer.launch({ headless: true }) 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 }); await browser.close() })()
文件解构设计
在这个时代,数据非常宝贵。根据网页的设计逻辑,如果选择特定href的地址,可以直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.()处理逻辑完美代码 pdf,或者输出对应的PDF文件,当然你也可以一次输出多个PDF文件~
我这里就不过多介绍了。毕竟Node.js可以上天堂,说不定以后真的可以做任何事。这么高质量又短的教程,请收藏
或者转发给你的朋友,谢谢。
天下数据是国内为数不多的拥有多家海外自建机房的新型IDC服务商之一,被业界公认为“中国IDC行业首选品牌”。
天下数据与全球近120个国家的顶级机房直接合作,提供来自香港、美国、韩国、日本、台湾、新加坡、荷兰、法国、英国、德国、埃及、南非洲、巴西、印度、越南等国家和地区。服务器及云服务器租用服务,如有需要请联系World Data客服!
除了提供传统的IDC产品外,天下数据的主要职责是提供更完善、更安全、更个性化的服务器解决方案,以满足大中型企业的个性化需求,尤其是在直销、金融、视频、流媒体、游戏等领域。 、电子商务、区块链、快消品、物联网、大数据等众多行业,为广大客户解决服务器租用遇到的各种问题。