国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

如何使用Node.js爬取任意網頁資源并輸出PDF文件到本地

2024-05-06 15:37:52
字體:
來源:轉載
供稿:網友

需求:

使用Node.js爬取網頁資源,開箱即用的配置 將爬取到的網頁內容以PDF格式輸出

如果你是一名技術人員,那么可以看我接下來的文章,否則,請直接移步到我的github倉庫,直接看文檔使用即可

倉庫地址:附帶文檔和源碼

本需求使用到的技術:Node.js和puppeteer

puppeteer 官網地址: puppeteer地址 Node.js官網地址:鏈接描述 Puppeteer是谷歌官方出品的一個通過DevTools協議控制headless Chrome的Node庫。可以通過Puppeteer的提供的api直接控制Chrome模擬大部分用戶操作來進行UI Test或者作為爬蟲訪問頁面來收集數據。 環境和安裝 Puppeteer本身依賴6.4以上的Node,但是為了異步超級好用的async/await,推薦使用7.6版本以上的Node。另外headless Chrome本身對服務器依賴的庫的版本要求比較高,centos服務器依賴偏穩定,v6很難使用headless Chrome,提升依賴版本可能出現各種服務器問題(包括且不限于無法使用ssh),最好使用高版本服務器。(建議使用最新版本的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 的包 ,其實是替我們開啟了另一個瀏覽器,重新去開啟網頁,獲取它們的數據。

上面只爬取了京東首頁的圖片內容,假設我的需求進一步擴大,需要爬取京東首頁中的所有<a> 標簽對應的跳轉網頁中的所有 title的文字內容,最后放到一個數組中。 我們的async函數上面一共分了五步, 只有 puppeteer.launch() ,browser.newPage(), browser.close() 是固定的寫法。 page.goto 指定我們去哪個網頁爬取數據,可以更換內部url地址,也可以多次調用這個方法。 page.evaluate 這個函數,內部是處理我們進入想要爬取網頁的數據邏輯 page.goto和page.evaluate兩個方法,可以在async內部調用多次,那意味著我們可以先進入京東網頁,處理邏輯后,再次調用page.goto這個函數

注意,上面這一切邏輯,都是puppeteer這個包幫我們在看不見的地方開啟了另外一個瀏覽器,然后處理邏輯,所以最終要調用browser.close()方法關閉那個瀏覽器。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 保定市| 河津市| 泊头市| 云安县| 革吉县| 九龙城区| 龙口市| 溧水县| 修文县| 安多县| 康保县| 张家界市| 库车县| 赫章县| 南岸区| 崇阳县| 金堂县| 沾益县| 同德县| 慈利县| 三原县| 柳州市| 望谟县| 台山市| 武功县| 韶山市| 南丰县| 石河子市| 通许县| 高台县| 林西县| 大埔县| 华容县| 永修县| 榕江县| 会理县| 汾阳市| 南昌县| 晋城| 汨罗市| 沿河|