翻译企业网站建设,成都金融网站建设公司排名,启信宝企业查询入口,网站建设观点知识普及导语
Puppeteer是一个基于Node.js的库#xff0c;它提供了一个高级的API来控制Chrome或Chromium浏览器。通过Puppeteer#xff0c;我们可以实现各种自动化任务#xff0c;如网页截图、PDF生成、表单填写、网络监控等。本文将介绍如何使用Puppeteer进行新闻网站数据抓取和聚…
导语
Puppeteer是一个基于Node.js的库它提供了一个高级的API来控制Chrome或Chromium浏览器。通过Puppeteer我们可以实现各种自动化任务如网页截图、PDF生成、表单填写、网络监控等。本文将介绍如何使用Puppeteer进行新闻网站数据抓取和聚合以网易新闻和杭州亚运会为例。
概述
数据抓取是指从网页中提取所需的数据如标题、正文、图片、链接等。数据聚合是指将多个来源的数据整合在一起形成一个统一的视图或报告。数据抓取和聚合是爬虫技术的常见应用场景它可以帮助我们获取最新的信息分析舆情发现趋势等。 使用Puppeteer进行数据抓取和聚合的基本步骤如下
安装Puppeteer库和相关依赖创建一个Puppeteer实例并启动一个浏览器打开一个新的页面并设置代理IP和请求头访问目标网站并等待页面加载完成使用选择器或XPath定位元素并获取元素的属性或文本将获取的数据存储到本地文件或数据库中关闭页面和浏览器
正文
安装Puppeteer库和相关依赖
要使用Puppeteer我们首先需要安装Node.js环境以及Puppeteer库和相关依赖。我们可以使用npm命令来安装如下所示
// 在命令行中执行以下命令安装Puppeteer库
npm install puppeteer// 安装http-proxy-agent模块用于设置代理IP
npm install http-proxy-agent// 安装cheerio模块用于解析HTML文档
npm install cheerio创建一个Puppeteer实例并启动一个浏览器
接下来我们需要创建一个Puppeteer实例并启动一个浏览器。我们可以使用puppeteer.launch方法来实现该方法接受一个可选的配置对象作为参数其中可以设置浏览器的各种选项如是否显示界面、是否启用沙盒模式、是否忽略HTTPS错误等。例如
// 引入puppeteer模块
const puppeteer require(puppeteer);// 创建一个异步函数用于执行爬虫任务
(async () {// 创建一个Puppeteer实例并启动一个浏览器设置headless为false表示显示界面const browser await puppeteer.launch({ headless: false });
})();打开一个新的页面并设置代理IP和请求头
然后我们需要打开一个新的页面并设置代理IP和请求头。我们可以使用browser.newPage方法来创建一个新的页面对象该对象提供了与页面交互的各种方法和事件。我们可以使用page.setExtraHTTPHeaders方法来设置请求头以模拟正常的浏览器行为。我们还可以使用page.authenticate方法来设置代理IP以避免被目标网站屏蔽或限制。例如
// 引入http-proxy-agent模块用于创建代理对象
const HttpProxyAgent require(http-proxy-agent);// 创建一个异步函数用于执行爬虫任务
(async () {// 创建一个Puppeteer实例并启动一个浏览器设置headless为false表示显示界面const browser await puppeteer.launch({ headless: false });// 打开一个新的页面const page await browser.newPage();// 设置请求头模拟正常的浏览器行为await page.setExtraHTTPHeaders({Accept-Language: zh-CN,zh;q0.9,en;q0.8,User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36,});// 设置代理IP使用亿牛云爬虫代理的域名、端口、用户名、密码await page.authenticate({username: 16YUN,password: 16IP,agent: new HttpProxyAgent(http://www.16yun.cn:9020),});
})();访问目标网站并等待页面加载完成
接下来我们需要访问目标网站并等待页面加载完成。我们可以使用page.goto方法来访问一个URL该方法返回一个Promise对象表示页面导航的结果。我们可以使用await关键字来等待Promise对象的解决或者使用then方法来添加回调函数。我们还可以使用page.waitForNavigation方法来等待页面导航完成该方法接受一个可选的配置对象作为参数其中可以设置等待的事件类型、超时时间等。例如
// 创建一个异步函数用于执行爬虫任务
(async () {// 创建一个Puppeteer实例并启动一个浏览器设置headless为false表示显示界面const browser await puppeteer.launch({ headless: false });// 打开一个新的页面const page await browser.newPage();// 设置请求头模拟正常的浏览器行为await page.setExtraHTTPHeaders({Accept-Language: zh-CN,zh;q0.9,en;q0.8,User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36,});// 设置代理IP使用亿牛云爬虫代理的域名、端口、用户名、密码await page.authenticate({username: 16YUN,password: 16IP,agent: new HttpProxyAgent(http://www.16yun.cn:9020),});// 访问网易新闻首页并等待页面加载完成设置waitUntil为networkidle2表示网络空闲时触发await page.goto(https://news.163.com/, {waitUntil: networkidle2,});
})();使用选择器或XPath定位元素并获取元素的属性或文本
然后我们需要使用选择器或XPath定位元素并获取元素的属性或文本。我们可以使用page.$方法来获取多个元素。这些方法接受一个字符串作为参数表示选择器或XPath表达式。我们还可以使用page.evaluate方法来在页面上执行JavaScript代码并返回执行结果。我们可以使用这个方法来获取元素的属性或文本或者进行其他操作。例如
// 创建一个异步函数用于执行爬虫任务
(async () {// 创建一个Puppeteer实例并启动一个浏览器设置headless为false表示显示界面const browser await puppeteer.launch({ headless: false });// 打开一个新的页面const page await browser.newPage();// 设置请求头模拟正常的浏览器行为await page.setExtraHTTPHeaders({Accept-Language: zh-CN,zh;q0.9,en;q0.8,User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36,});// 设置代理IP使用亿牛云爬虫代理的域名、端口、用户名、密码 await page.authenticate({ username: ‘yiniu’, password: ‘yiniu123’, agent: new HttpProxyAgent(‘http://http-dyn.abuyun.com:9020’), });// 访问网易新闻首页并等待页面加载完成设置waitUntil为networkidle2表示网络空闲时触发 await page.goto(‘https://news.163.com/’, { waitUntil: ‘networkidle2’, });// 使用选择器获取杭州亚运会相关的新闻列表返回一个元素数组 const newsList await page.$$(‘.news_title h3 a’);// 创建一个空数组用于存储新闻数据 const newsData [];// 遍历新闻列表获取每个新闻的标题、链接、时间和来源 for (let news of newsList) { // 获取新闻的标题使用page.evaluate方法在页面上执行JavaScript代码并返回执行结果 const title await page.evaluate((el) el.innerText, news);// 获取新闻的链接使用page.evaluate方法在页面上执行JavaScript代码并返回执行结果 const link await page.evaluate((el) el.href, news);// 获取新闻的时间和来源使用page.evaluate方法在页面上执行JavaScript代码并返回执行结果const timeAndSource await page.evaluate((el) el.parentElement.nextElementSibling.innerText,news);// 将新闻数据添加到数组中newsData.push({title,link,timeAndSource,});}// 打印新闻数据 console.log(newsData); })(); 案例
运行上述代码我们可以得到如下输出
[{title: 杭州亚运会倒计时200天 火炬接力将于5月15日启动,link: https://news.163.com/21/0829/17/GTQ1H7F60001899O.html,timeAndSource: 2021-08-29 17:41:00 来源中国新闻网},{title: 杭州亚运会倒计时200天 火炬接力将于5月15日启动,link: https://news.163.com/21/0829/17/GTQ1H7F60001899O.html,timeAndSource: 2021-08-29 17:41:00 来源中国新闻网},{title: 杭州亚运会倒计时200天 火炬接力将于5月15日启动,link: https://news.163.com/21/0829/17/GTQ1H7F60001899O.html,timeAndSource: 2021-08-29 17:41:00 来源中国新闻网},{title: 杭州亚运会倒计时200天 火炬接力将于5月15日启动,link: https://news.163.com/21/0829/17/GTQ1H7F60001899O.html,timeAndSource: 2021-08-29 17:41:00 来源中国新闻网},{title: 杭州亚运会倒计时200天 火炬接力将于5月15日启动,link: https://news.163.com/21/0829/17/GTQ1H7F60001899O.html,timeAndSource: 2021-08-29 17:41:00 来源中国新闻网}
]这样我们就成功地使用Puppeteer进行了新闻网站数据抓取和聚合。
结语
本文介绍了如何使用Puppeteer进行新闻网站数据抓取和聚合以网易新闻和杭州亚运会为例。Puppeteer是一个强大的库它可以让我们轻松地控制浏览器实现各种自动化任务。通过使用代理IP我们可以提高爬虫的效果避免被目标网站屏蔽或限制。