簡單獲取axios
+ cheerio
-
安裝
npm install axios
,npm install cheerio
,參考cheerio -
導入模塊
let axios=require('axios') const cheerio=require('cheerio')
-
請求數據
axios.get(httpUrl).then(res=>{ // console.log(res.data) // 用cheerio解析html文檔 let $= cheerio.load(res.data) // console.log($) // 獲取當前頁面所有表情鏈接 $('#home .col-sm-9>a').each((index,element)=>{ // console.log(element) // 獲取每一個a標籤中的href屬性值 let href=$(element).attr('href') console.log(href) }) })
-
反爬蟲
// 使用第三方代理 let axios=require('axios') let httpUrl="https://www.doutula.com/" let options={ proxy:{ host:'221.229.252.98', // 代理ip port:9797 // 代理端口號 } } axios.get(httpUrl,options).then(res=>{ console.log(res) })
使用puppeteer
插件
-
安裝
npm i puppeteer
,參考puppeteer或者puppeteer CN -
引入,打開瀏覽器窗口
let puppeteer=require('puppeteer') async function test() { // puppeteer.launch 實例開啓瀏覽器, // 可以傳入一個options對象, // 可以配置爲無界面瀏覽器和有界面瀏覽器,無界面瀏覽器性能更高,有界面一般用於調試 let options={ // 設置視窗的框高 defaultViewport:{ width:800, height:800 }, // 設置爲有界面,如果爲true,則爲無界面 headless:false } const browser = await puppeteer.launch(options) // 打開頁面 let page = await browser.newPage() // 訪問網站 await page.goto('https://www.baidu.com') } test()
-
截屏
async function test() { // puppeteer.launch 實例開啓瀏覽器, // 可以傳入一個options對象, // 可以配置爲無界面瀏覽器和有界面瀏覽器,無界面瀏覽器性能更高,有界面一般用於調試 let options={ // 設置視窗的框高 defaultViewport:{ width:800, height:800 }, // 設置爲有界面,如果爲true,則爲無界面 headless:false } const browser = await puppeteer.launch(options) // 打開頁面 let page = await browser.newPage() // 訪問網站 await page.goto('https://www.baidu.com') // 截屏 await page.screenshot({path: 'example.png'}) } test()
-
獲取頁面元素
async function test() { // puppeteer.launch 實例開啓瀏覽器, // 可以傳入一個options對象, // 可以配置爲無界面瀏覽器和有界面瀏覽器,無界面瀏覽器性能更高,有界面一般用於調試 let options={ // 設置視窗的框高 defaultViewport:{ width:800, height:800 }, // 設置爲有界面,如果爲true,則爲無界面 headless:false } const browser = await puppeteer.launch(options) // 打開頁面 let page = await browser.newPage() // 訪問網站 await page.goto('https://www.baidu.com') // 獲取頁面內容id爲u1下的a標籤 // $$eval函數使得回調函數可以運行在瀏覽器中 let elements=await page.$$eval('#u1 a',(elements)=>{ console.log(elements) // 在瀏覽器控制檯輸出 let eles=[] elements.forEach((item,i)=>{ console.log(item.innerHTML) // 在瀏覽器控制檯輸出 let eleObj={ href:item.getAttribute('href'), text:item.innerText } eles.push(eleObj) }) }) // 監聽事件,監聽瀏覽器輸出內容 page.on('console',(...args)=>{ console.log(args) // 在命令提示符終端輸出 }) } test()
-
操作頁面內容
async function test() { // puppeteer.launch 實例開啓瀏覽器, // 可以傳入一個options對象, // 可以配置爲無界面瀏覽器和有界面瀏覽器,無界面瀏覽器性能更高,有界面一般用於調試 let options={ // 設置視窗的框高 defaultViewport:{ width:800, height:800 }, // 設置爲有界面,如果爲true,則爲無界面 headless:false } const browser = await puppeteer.launch(options) // 打開頁面 let page = await browser.newPage() // 訪問網站 await page.goto('https://www.baidu.com') // 獲取輸入框 let elementInput= await page.$('#kw') // console.log(elementInput[0]) // 聚焦輸入框 await elementInput.focus() // 向輸入框輸入內容內容 await page.keyboard.type('北京') // 獲取搜索按鈕 let elementButton=await page.$('#form input[type="submit"]') // 點擊搜索按鈕 await elementButton.click() } test()
爬蟲
- 通過模擬瀏覽器的請求,服務器返回我們需求數據,將數據解析出來,並且保存。這樣的行爲稱爬蟲
- 爬蟲流程
- 確定想要的數據
- 分析頁面
獲取數據的方式(正則,cheerio)
- 編寫單個數據獲取的案例
- 遇到阻礙,進行反爬對抗
將請求頭設置爲跟瀏覽器一樣
設置延時爬取單個頁面或者通過代理