摘要:這里由于京東的分界面都使用了,所以我們可以用,總之他們開發能用的選擇器,我們都可以用,否則就不可以。
難道爬蟲只能用 python 做? 不,我們上天的 Node.js 也可以做!
需要準備的包
Node.js的最新版本 下載地址 Node.js官網
npm 包管理器下載 下載最新的官網版本 Node.js 會自帶 npm
npm的第三方包 puppeteer 在對應的js文件內運行命令行工具 npm i puppeteer -D 即可
爬蟲在獲取某些有保護機制的網頁時可能會失效初入江湖 -自在地境篇
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 的包 ,其實是替我們開啟了另一個瀏覽器,重新去開啟網頁,獲取它們的數據。瀟灑入世 -逍遙天境篇
上面只爬取了京東首頁的圖片內容,假設我的需求進一步擴大,需要爬取京東首頁
中的所有 標簽對應的跳轉網頁中的所有 title的文字內容,最后放到一個數組中。
我們的async函數上面一共分了五步, 只有 puppeteer.launch() ,
browser.newPage(), browser.close() 是固定的寫法。
page.goto 指定我們去哪個網頁爬取數據,可以更換內部url地址,也可以多次
調用這個方法。
page.evaluate 這個函數,內部是處理我們進入想要爬取網頁的數據邏輯
page.goto和 page.evaluate兩個方法,可以在async內部調用多次,
那意味著我們可以先進入京東網頁,處理邏輯后,再次調用page.goto這個函數,
注意,上面這一切邏輯,都是puppeteer這個包幫我們在看不見的地方開啟了另外一個
瀏覽器,然后處理邏輯,所以最終要調用browser.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() })()
上面有天坑 page.evaluate函數內部的console.log不能打印,而且內部不能獲取外部的變量,只能return返回,威震武林 -神游玄境篇
使用的選擇器必須先去對應界面的控制臺實驗過能不能選擇DOM再使用,比如京東無法使用querySelector。這里由于
京東的分界面都使用了jQuery,所以我們可以用jQuery,總之他們開發能用的選擇器,我們都可以用,否則就不可以。
數據在這個時代非常珍貴,上面兩個能獲取一些指定的特定資源,按照網頁的設計邏輯,選定特定的href的地址,
可以先直接獲取對應的資源,也可以通過再次使用 page.goto方法進入,再調用 page.evaluate() 處理邏輯。
這里就不做過多介紹了,畢竟 Node.js 是可以上天的,或許未來它真的什么都能做。這么優質簡短的教程,請收藏
或者轉發給您的朋友,謝謝。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102868.html
摘要:這里由于京東的分界面都使用了,所以我們可以用,總之他們開發能用的選擇器,我們都可以用,否則就不可以。 難道爬蟲只能用 python 做? 不,我們上天的 Node.js 也可以做! 需要準備的包 Node.js的最新版本 下載地址 Node.js官網 npm 包管理器下載 下載最新的官網版本 Node.js 會自帶 npm npm的第三方包 puppeteer 在對應...
摘要:這里由于京東的分界面都使用了,所以我們可以用,總之他們開發能用的選擇器,我們都可以用,否則就不可以。 難道爬蟲只能用 python 做? 不,我們上天的 Node.js 也可以做! 需要準備的包 Node.js的最新版本 下載地址 Node.js官網 npm 包管理器下載 下載最新的官網版本 Node.js 會自帶 npm npm的第三方包 puppeteer 在對應...
摘要:上面只爬取了京東首頁的圖片內容,假設我的需求進一步擴大,需要爬取京東首頁中的所有標簽對應的跳轉網頁中的所有的文字內容,最后放到一個數組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎的朋友觀看~ 需求: 使用Node.js爬取網頁資源,開箱即用的配置 將爬取到的...
摘要:上面只爬取了京東首頁的圖片內容,假設我的需求進一步擴大,需要爬取京東首頁中的所有標簽對應的跳轉網頁中的所有的文字內容,最后放到一個數組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎的朋友觀看~ 需求: 使用Node.js爬取網頁資源,開箱即用的配置 將爬取到的...
閱讀 3105·2021-11-18 10:02
閱讀 2617·2021-10-13 09:47
閱讀 3033·2021-09-22 15:07
閱讀 791·2019-08-30 15:43
閱讀 1809·2019-08-30 10:59
閱讀 1684·2019-08-29 15:34
閱讀 1702·2019-08-29 15:06
閱讀 438·2019-08-29 13:28