首頁 web前端 js教程 puppeteer模擬登入抓取頁面的實作程式碼

puppeteer模擬登入抓取頁面的實作程式碼

May 11, 2018 pm 03:07 PM
抓取

這次帶給大家puppeteer模擬登入抓取頁面的實作程式碼,puppeteer模擬登入抓取頁面實現的注意事項有哪些,以下就是實戰案例,一起來看一下。

關於熱圖

在網站分析產業中,網站熱圖能夠很好的反應使用者在網站上的操作行為,具體分析使用者的喜好,對網站進行針對性的最佳化,一個熱圖的例子(來自ptengine)

上圖中能很清晰的看到使用者關注點在那,我們不關注產品中熱圖的功能如何,本篇文章就熱圖的實現做一下簡單的分析和總結。

熱圖主流的實作方式

#一般實作熱圖顯示需要經過以下階段:1.取得網站頁
2.取得經過處理後的使用者資料
3.繪製熱圖
 本篇主要聚焦於階段1來詳細的介紹一下主流的在熱圖中取得網站頁面的實作方式
4.使用iframe直接嵌入使用者網站
5.抓取使用者頁面儲存到本地,透過iframe嵌入本地資源(所謂本地資源這裡認為是分析工具這一端)

兩種方式各有各的優缺點

首先第一種直接嵌入使用者網站,這個有一定的限制條件,例如如果使用者網站為了防止iframe劫持,不允許iframe嵌套(設定meta X-FRAME-OPTIONS 為sameorgin或直接設定http header ,甚至直接透過js來控制if(window.top !== window.self){ window.top.location = window.location;} #),這種情況就需要客戶網站做一部分工作才可以被分析工具的iframe加載,使用起來不一定那麼方便,因為並不是所有的需要檢測分析的網站用戶都可以管理網站的。

第二種方式,直接抓取網站頁面到本地伺服器,然後瀏覽的是本機伺服器上抓取的頁面,這種情況下頁面已經過來了,我們就可以為所欲為為了,首先我們繞過了X-FRAME-OPTIONS 為sameorgin的問題,只需要解決js控制的問題,對於抓取的頁面來說,我們可以透過特殊的對應來處理(例如移除對應的js控制,或者添加我們自己的js);但這種方式也有很多的不足:1、無法抓取spa頁面,無法抓取需要使用者登入授權的頁面,無法抓取使用者設定了白明白的頁面等等。

兩種方式都存在https 和http資源因同源策略引起的另一個問題,https站無法載入http資源,所以如果為了最好的相容性,熱圖分析工具需要被應用http協議,當然具體可以根據造訪的客戶網站而具體分站優化。

抓取網站頁面如何優化

這裡我們針對抓取網站頁面遇到的問題基於puppeteer做一些優化,提高抓取成功的機率,主要優化以下兩種頁面:

1.spa頁

spa頁面在當前頁算是主流了,但是它總所周知的是其對搜索引擎的不友善;通常的頁面抓取程式其實就是一個簡單的爬蟲,其流程通常都是發起一個http get 請求到使用者網站(應該是使用者網站伺服器)。這種抓取方式本身就會有問題問題,首先,直接請求的是用戶伺服器,用戶伺服器對非瀏覽器的agent 應該會有很多限制,需要繞過處理;其次,請求返回的是原始內容,需要在瀏覽器中透過js渲染的部分無法取得(當然,在iframe嵌入後,js執行還是會再一定程度上彌補這個問題),最後如果頁面是spa頁面,那麼此時獲取的只是模板,在熱圖中顯示效果非常不友善。

針對這種情況,如果基於puppeteer來做,流程就變成了

puppeteer啟動瀏覽器開啟使用者網站-->頁面渲染-->返回渲染後結果,簡單的用偽代碼實作如下:

const puppeteer = require('puppeteer');
async getHtml = (url) =>{
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  return await page.content();
}
登入後複製

這樣我們拿到的內容就是渲染後的內容,無論頁面的渲染方式為何(客戶端渲染抑或服務端)

需要登入的頁面

對於需要登入頁面其實分為多種情況:

需要登录才可以查看页面,如果没有登录,则跳转到login页面(各种管理系统)

对于这种类型的页面我们需要做的就是模拟登录,所谓模拟登录就是让浏览器去登录,这里需要用户提供对应网站的用户名和密码,然后我们走如下的流程:

访问用户网站-->用户网站检测到未登录跳转到login-->puppeteer控制浏览器自动登录后跳转到真正需要抓取的页面,可用如下伪代码来说明:

const puppeteer = require("puppeteer");
async autoLogin =(url)=>{
   const browser = await puppeteer.launch();
   const page =await browser.newPage();
   await page.goto(url);
   await page.waitForNavigation();
   //登录
   await page.type('#username',"用户提供的用户名");
   await page.type('#password','用户提供的密码');
   await page.click('#btn_login');
  //页面登录成功后,需要保证redirect 跳转到请求的页面
   await page.waitForNavigation();
   return await page.content();
}
登入後複製

登录与否都可以查看页面,只是登录后看到内容会所有不同 (各种电商或者portal页面)

这种情况处理会比较简单一些,可以简单的认为是如下步骤:

通过puppeteer启动浏览器打开请求页面-->点击登录按钮-->输入用户名和密码登录 -->重新加载页面

基本代码如下图:

const puppeteer = require("puppeteer");
async autoLoginV2 =(url)=>{
   const browser = await puppeteer.launch();
   const page =await browser.newPage();
   await page.goto(url);
   await page.click('#btn_show_login');
   //登录
   await page.type('#username',"用户提供的用户名");
   await page.type('#password','用户提供的密码');
   await page.click('#btn_login');
  //页面登录成功后,是否需要reload 根据实际情况来确定
   await page.reload();
   return await page.content();
}
登入後複製

总结

明天总结吧,今天下班了。

补充(还昨天的债):基于puppeteer虽然可以很友好的抓取页面内容,但是也存在这很多的局限

1.抓取的内容为渲染后的原始html,即资源路径(css、image、javascript)等都是相对路径,保存到本地后无法正常显示,需要特殊处理(js不需要特殊处理,甚至可以移除,因为渲染的结构已经完成)

2.通过puppeteer抓取页面性能会比直接http get 性能会差一些,因为多了渲染的过程

3.同样无法保证页面的完整性,只是很大的提高了完整的概率,虽然通过page对象提供的各种wait 方法能够解决这个问题,但是网站不同,处理方式就会不同,无法复用。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Vue如何操作html字段字符串转换为HTML标签

Koa2实现文件上传下载案例分析

以上是puppeteer模擬登入抓取頁面的實作程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Scrapy案例解析:如何抓取LinkedIn上公司訊息 Scrapy案例解析:如何抓取LinkedIn上公司訊息 Jun 23, 2023 am 10:04 AM

Scrapy是一個基於Python的爬蟲框架,可以快速且方便地獲取網路上的相關資訊。在本篇文章中,我們將透過Scrapy案例來詳細解析如何抓取LinkedIn上的公司資訊。確定目標URL首先,我們需要明確我們的目標是LinkedIn上的公司資訊。因此,我們需要找到LinkedIn公司資訊頁面的URL。開啟LinkedIn網站,在搜尋框中輸入公司名稱,在

使用 PHP 實作抓取 Instagram 資訊的範例 使用 PHP 實作抓取 Instagram 資訊的範例 Jun 13, 2023 pm 06:26 PM

Instagram是目前最受歡迎的社群媒體之一,擁有數億的活躍用戶。其中用戶上傳了數十億的圖片和視頻,這些數據對於許多企業和個人來說​​都是非常有價值的。因此,在許多情況下,需要使用程式自動抓取Instagram資料。本文將介紹如何使用PHP實現Instagram資料的抓取,並提供實作範例。安裝PHP的cURL擴充cURL是一個用於在各種

使用 PHP 實作抓取知問題及回答的程序 使用 PHP 實作抓取知問題及回答的程序 Jun 13, 2023 pm 11:21 PM

知乎作為一個極受歡迎的知識分享社區,其上眾多用戶貢獻了大量高品質的問題和回答,對於學習和工作的人來說,這些內容對於解決問題和拓展視野非常有幫助。如果想要整理和利用這些內容,就需要使用抓取程式來取得相關資料。本文將介紹使用PHP編寫抓取知乎問題及回答的程式。簡介知乎是一個內容非常豐富的平台,其上的內容包括但不限於問題、答案、專欄、主題、使用者等。我們可以通

使用Java爬蟲:高效率擷取網頁資料的實用方法與技巧 使用Java爬蟲:高效率擷取網頁資料的實用方法與技巧 Jan 05, 2024 am 08:15 AM

Java爬蟲實戰:快速抓取網頁資料的方法與技巧引言:隨著網路的發展,海量的資訊被儲存在網頁中,人們想要從中獲取有用的資料變得越來越困難。而使用爬蟲技術,我們可以快速、自動地抓取網頁數據,提取出我們需要的有用資訊。本文將介紹使用Java進行爬蟲開發的方法與技巧,並提供具體的程式碼範例。一、選擇合適的爬蟲框架在Java領域,有許多優秀的爬蟲框架可供選擇,如Jso

Nginx重定向設定解析,實現URL轉送與抓取 Nginx重定向設定解析,實現URL轉送與抓取 Jul 04, 2023 pm 06:37 PM

Nginx重定向設定解析,實作URL轉送與抓取引言:在Web應用開發中,常會遇到需要對URL進行重新導向的情況。 Nginx作為一種高效能的Web伺服器和反向代理伺服器,提供了強大的重定向功能。本文將對Nginx的重定向配置進行解析,並透過程式碼範例展示如何實現URL轉發和抓取的功能。一、基本概念重定向是指將一個URL請求轉送到另一個URL的過程。在Nginx中

如何運用PHP和phpSpider進行特定網站內容的精準抓取? 如何運用PHP和phpSpider進行特定網站內容的精準抓取? Jul 22, 2023 pm 08:29 PM

如何運用PHP和phpSpider進行特定網站內容的精準抓取?導言:隨著網路的發展,網站上的資料量越來越多,透過手動操作取得所需資訊的效率較低。因此,我們經常需要運用自動化抓取工具來取得特定網站的內容,PHP語言和phpSpider庫就是其中一個非常實用的工具。本文將介紹如何使用PHP和phpSpider進行特定網站內容的精準抓取,並提供程式碼範例。一、安裝

如何使用Scrapy解析和抓取網站數據 如何使用Scrapy解析和抓取網站數據 Jun 23, 2023 pm 12:33 PM

Scrapy是一個用於抓取和解析網站資料的Python框架。它可以幫助開發人員輕鬆抓取網站資料並進行分析,從而實現資料探勘和資訊收集等任務。本文將分享如何使用Scrapy建立和執行簡單的爬蟲程式。第一步:安裝和設定Scrapy在使用Scrapy之前,需要先安裝並設定Scrapy環境。可以透過執行以下命令安裝Scrapy:pipinstallscra

Nginx重新導向設定教程,實作URL轉送與抓取 Nginx重新導向設定教程,實作URL轉送與抓取 Jul 05, 2023 am 11:42 AM

Nginx重新導向設定教學課程,實作URL轉送和抓取Nginx是一款高效能的開源Web伺服器,也可以用來實現反向代理、負載平衡以及URL重新導向等功能。在本篇文章中,我們將介紹如何透過Nginx配置實現URL重定向和抓取的功能,並提供相關的程式碼範例。一、URL轉送URL轉送是指將一個URL請求轉送到另一個URL位址上。在Nginx中,我們可以透過設定來實現URL的

See all articles