首頁 web前端 js教程 如何實現百度指數爬蟲功能

如何實現百度指數爬蟲功能

Apr 12, 2018 pm 04:45 PM
指數 爬蟲 百度

這次為大家帶來怎樣實現百度指數爬蟲功能,實現百度指數爬蟲功能的注意事項有哪些,下面就是實戰案例,一起來看一下。

# 之前看過一篇腦洞大開的文章,介紹了各個大廠的前端反爬蟲技巧,但也正如此文所說,沒有100%的反爬蟲方法,本文介紹一種簡單的方法,來繞過所有這些前端反爬蟲手段。

下面的程式碼以百度指數為例,程式碼已經封裝成一個百度指數爬蟲node庫:https://github.com/Coffcer/baidu-index-spider

  1. #

    note: 請勿濫用爬蟲給別人添麻煩

  2. #

    百度指數的反爬蟲策略

  3. 觀察百度指數的介面,指數資料是一個趨勢圖,當滑鼠懸浮在某一天的時候,會觸發兩個請求,將結果顯示在懸浮框裡

    # 可以發現,百度指數其實在前端做了一定的反爬蟲策略。當滑鼠移動到圖表上時,會觸發兩個請求,一個請求傳回一段html,一個請求傳回一張產生的圖片。 html中並不包含實際數值,而是透過設定width和
  4. margin-left
  5. ,來顯示圖片上的對應字元。而且

    請求參數

    上有res、res1這種我們不知如何模擬的參數,所以用常規的模擬請求或html爬取的方式,都很難爬到百度指數的資料。

爬蟲思路

  1. # 怎麼突破百度這種反爬蟲方法呢,其實也很簡單,就是完全不去管他是如何反爬蟲的。我們只需模擬使用者操作,將需要的數值截圖下來,做圖像辨識就行。步驟大概是:

    模擬登入
  2. # 開啟指數頁面

  3. # 滑鼠移動到指定日期

    等待請求結束,截取數值部分的圖片

# 影像辨識得到值

# 循環第3~5步,就得到每一個日期對應的值

這種方法理論上能爬任何網站的內容,接下來我們就一步一步實作爬蟲,下面會用到的函式庫:

puppeteer 模擬瀏覽器操作

node-tesseract tesseract的封裝,用來做映像識別

jimp

圖片裁切

# ###安裝Puppeteer, 模擬使用者操作########## Puppeteer是Google Chrome團隊出品的Chrome自動化工具,用來控制Chrome執行指令。可以模擬使用者操作,做自動化測試、爬蟲等。用法非常簡單,網路上有不少入門教程,順著本文看完也大概可以知道如何使用。 ###### API文件: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md###### 安裝:###
npm install --save puppeteer
登入後複製
### Puppeteer在安裝時會自動下載Chromium,以確保可以正常運作。但國內網路不一定能成功下載Chromium,如果下載失敗,可以使用cnpm來安裝,或是將下載位址改成淘寶的鏡像,然後再安裝:###
npm config set PUPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors
npm install --save puppeteer
登入後複製
### 你也可以在安裝時跳過Chromium下載,透過程式碼指定本機Chrome路徑來執行:###
// npm
npm install --save puppeteer --ignore-scripts
// node
puppeteer.launch({ executablePath: '/path/to/Chrome' });
登入後複製
### ###實作######### 為版面整潔,下面只列出了主要部分,程式碼涉及到selector的部分都用了...代替,完整程式碼參看文章頂部的github倉庫。 ###### ###開啟百度指數頁面,模擬登入######### 這裡做的就是模擬使用者操作,一步步點選和輸入。沒有處理登入###驗證碼###的情況,處理驗證碼又是另一個話題了,如果你在本機登入過百度,一般不需要驗證碼。 ###
// 启动浏览器,
// headless参数如果设置为true,Puppeteer将在后台操作你Chromium,换言之你将看不到浏览器的操作过程
// 设为false则相反,会在你电脑上打开浏览器,显示浏览器每一操作。
const browser = await puppeteer.launch({headless:false});
const page = await browser.newPage();
// 打开百度指数
await page.goto(BAIDU_INDEX_URL);
// 模拟登陆
await page.click('...');
await page.waitForSelecto('...');
// 输入百度账号密码然后登录
await page.type('...','username');
await page.type('...','password');
await page.click('...');
await page.waitForNavigation();
console.log(':white_check_mark: 登录成功');
登入後複製
### ###模擬移動滑鼠,取得所需的資料#######

需要将页面滚动到趋势图的区域,然后移动鼠标到某个日期上,等待请求结束,tooltip显示数值,再截图保存图片。

// 获取chart第一天的坐标
const position = await page.evaluate(() => {
 const $image = document.querySelector('...');
 const $area = document.querySelector('...');
 const areaRect = $area.getBoundingClientRect();
 const imageRect = $image.getBoundingClientRect();
 // 滚动到图表可视化区域
 window.scrollBy(0, areaRect.top);
 return { x: imageRect.x, y: 200 };
});
// 移动鼠标,触发tooltip
await page.mouse.move(position.x, position.y);
await page.waitForSelector('...');
// 获取tooltip信息
const tooltipInfo = await page.evaluate(() => {
 const $tooltip = document.querySelector('...');
 const $title = $tooltip.querySelector('...');
 const $value = $tooltip.querySelector('...');
 const valueRect = $value.getBoundingClientRect();
 const padding = 5;
 return {
 title: $title.textContent.split(' ')[0],
 x: valueRect.x - padding,
 y: valueRect.y,
 width: valueRect.width + padding * 2,
 height: valueRect.height
 }
});
登入後複製

截图

计算数值的坐标,截图并用jimp对裁剪图片。

await page.screenshot({ path: imgPath });
// 对图片进行裁剪,只保留数字部分
const img = await jimp.read(imgPath);
await img.crop(tooltipInfo.x, tooltipInfo.y, tooltipInfo.width, tooltipInfo.height);
// 将图片放大一些,识别准确率会有提升
await img.scale(5);
await img.write(imgPath);
登入後複製

图像识别

这里我们用Tesseract来做图像识别,Tesseracts是Google开源的一款OCR工具,用来识别图片中的文字,并且可以通过训练提高准确率。github上已经有一个简单的node封装: node-tesseract ,需要你先安装Tesseract并设置到环境变量。

Tesseract.process(imgPath, (err, val) => {
if (err || val == null) {
 console.error(':x: 识别失败:' + imgPath);
 return;
}
console.log(val);
登入後複製

实际上未经训练的Tesseracts识别起来会有少数几个错误,比如把9开头的数字识别成`3,这里需要通过训练去提升Tesseracts的准确率,如果识别过程出现的问题都是一样的,也可以简单通过正则去修复这些问题。

封装

实现了以上几点后,只需组合起来就可以封装成一个百度指数爬虫node库。当然还有许多优化的方法,比如批量爬取,指定天数爬取等,只要在这个基础上实现都不难了。

const recognition = require('./src/recognition');
const Spider = require('./src/spider');
module.exports = {
 async run (word, options, puppeteerOptions = { headless: true }) {
 const spider = new Spider({ 
 imgDir, 
 ...options 
 }, puppeteerOptions);
 // 抓取数据
 await spider.run(word);
 // 读取抓取到的截图,做图像识别
 const wordDir = path.resolve(imgDir, word);
 const imgNames = fs.readdirSync(wordDir);
 const result = [];
 imgNames = imgNames.filter(item => path.extname(item) === '.png');
 for (let i = 0; i < imgNames.length; i++) {
 const imgPath = path.resolve(wordDir, imgNames[i]);
 const val = await recognition.run(imgPath);
 result.push(val);
 }
 return result;
 }
}
登入後複製

反爬虫

最后,如何抵挡这种爬虫呢,个人认为通过判断鼠标移动轨迹可能是一种方法。当然前端没有100%的反爬虫手段,我们能做的只是给爬虫增加一点难度。

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

推荐阅读:

easyui日期时间框在IE中的兼容性如何处理

vue判断input输入内容有否有空格

以上是如何實現百度指數爬蟲功能的詳細內容。更多資訊請關注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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

2 個月不見,人形機器人 Walker S 會摺衣服了 2 個月不見,人形機器人 Walker S 會摺衣服了 Apr 03, 2024 am 08:01 AM

機器之能報道編輯:吳昕國內版的人形機器人+大模型組隊,首次完成疊衣服這類複雜柔性材料的操作任務。隨著融合了OpenAI多模態大模型的Figure01揭開神秘面紗,國內同行的相關進展一直備受關注。就在昨天,國內"人形機器人第一股"優必選發布了人形機器人WalkerS深入融合百度文心大模型後的首個Demo,展示了一些有趣的新功能。現在,得到百度文心大模型能力加持的WalkerS是這個樣子的。和Figure01一樣,WalkerS沒有走動,而是站在桌子後面完成一系列任務。它可以聽從人類的命令,折疊衣物

百度無痕模式怎麼解除 百度無痕模式怎麼解除 Feb 29, 2024 pm 03:40 PM

百度無痕模式是一項隱私權保護功能,它允許使用者在使用百度搜尋或其他服務時,不留任何個人資訊或瀏覽記錄。對於某些用戶來說,他們可能希望解除無痕模式,以便能夠保留自己的搜尋記錄或瀏覽記錄。那麼百度無痕模式要怎麼解除呢?目前還不清楚的朋友也別著急,接下來小編為大家帶來了無痕瀏覽模式解除方法,大家可以按照以下步驟進行操作。百度無痕模式怎麼解除1、點選桌面的【百度】圖標,開啟百度APP。 2.隨便搜尋一個東西,進入搜尋結果頁。 3.點選頁面底部的【≡】。 4、在彈出的視窗中找到“多視窗”,點擊進入。 5、開啟/關閉「無痕

deepseek網頁版入口 deepseek官網入口 deepseek網頁版入口 deepseek官網入口 Feb 19, 2025 pm 04:54 PM

DeepSeek 是一款強大的智能搜索與分析工具,提供網頁版和官網兩種訪問方式。網頁版便捷高效,免安裝即可使用;官網則提供全面產品信息、下載資源和支持服務。無論個人還是企業用戶,都可以通過 DeepSeek 輕鬆獲取和分析海量數據,提升工作效率、輔助決策和促進創新。

百度息壤貝殼取得方法介紹 百度息壤貝殼取得方法介紹 Mar 28, 2024 am 09:11 AM

在息壤中有不少用戶不知道貝殼在哪裡,怎麼才能獲得,有些玩家轉了幾個小時候都沒有找到,下面小編就帶來了百度息壤貝殼的獲取方法,快來一起看看吧。百度息壤貝殼怎麼獲得1、首先我們需要來到社區,然後來到下圖的這個位置。 2、在這裡選擇目的地,選擇進入188樓。 3.進入188層後,在周圍轉悠會有這個提示,點擊我知道了就行。 4.貝殼的位置可能會有些難找,就在188電梯的後面,有個發光的小點就是貝殼。 5.撿貝殼要用VR把手才能撿,點擊貝殼就可以了。兌換方式1、先點選頁面右上方的「設定」圖標,在設定中選擇「

百度Apollo重磅發表全球首個支援L4級自動駕駛的大模型Apollo ADFM 百度Apollo重磅發表全球首個支援L4級自動駕駛的大模型Apollo ADFM Jun 04, 2024 pm 08:01 PM

5月15日,百度Apollo在武漢百度蘿蔔快跑汽車機器人智行谷舉辦ApolloDay2024,全方位展示百度十年深耕自動駕駛的重大進展,基於大模型帶來技術階躍、面向乘客安全全新定義的無人車和全球最大的無人車自動營運網絡,百度已經做到自動駕駛比人類駕駛更安全。得益於此,更安全舒適、綠色低碳的出行方式正從理想成為現實。百度集團副總裁、智慧駕駛事業群組總裁王雲鵬現場表示:「我們做無人車的初衷,是滿足老百姓日益增長的、對美好出行的嚮往,人民群眾的滿意是我們前進的動力。因為安全、所以美好,我們欣喜地看到

百度李彥宏率隊拜訪中國石油,討論油氣產業智慧化 百度李彥宏率隊拜訪中國石油,討論油氣產業智慧化 May 07, 2024 pm 06:13 PM

本站5月7日消息,5月6日,百度創辦人、董事長兼執行長李彥宏帶隊在北京拜訪中國石油天然氣集團有限公司(以下簡稱「中國石油」),並與中國石油集團董事長、黨組書記戴厚良舉行會談。雙方就強化合作,推動能源產業與數位化智慧化深度融合進行了深入交流。中國石油將加速推動數位中中國石油建設,加強與百度集團合作,推動能源產業與數位化智慧化的深度融合,為保障國家能源安全做出更大貢獻。李彥宏表示,大模型展現的「智慧湧現」與理解、生成、邏輯、記憶等核心能力,為前沿科技與油氣業務結合開啟了更廣闊的想像空間。一直

消息指出三星 Galaxy S24 系列手機國行版「即圈即搜」將支援Google搜尋 消息指出三星 Galaxy S24 系列手機國行版「即圈即搜」將支援Google搜尋 Jun 01, 2024 am 09:54 AM

5月31日消息,根據部落客@i冰宇宙今日爆料,三星GalaxyS24系列手機國行版「即圈即搜」將支援Google搜尋。具體上線時間,該部落客並未透露。根據三星先前介紹,三星GalaxyS24系列實裝了眾多高階AI能力,將輸入、翻譯、錄音機、筆記、相機等實用功能AI化,為使用者帶來更方便、更有效率的綜合體驗。與海外版不同的是,三星GalaxyS24系列的AI功能大多由國內廠商提供服務,例如百度等。先前報導,GalaxyAI深度整合百度文心大模型多項能力,可提供端側賦能的通話、翻譯功能,以及借助生成式AI帶來的智能摘

ai工具推薦 ai工具推薦 Nov 29, 2024 am 11:08 AM

本文介紹了六款受歡迎的 AI 工具,包括抖音豆包、文心一格、騰訊智影、百度飛槳 EasyDL、百度 AI Studio 和訊飛星火認知大模型。這些工具涵蓋不同的功能,如文字創作、圖像生成、影片編輯和 AI 模型開發。選擇合適的 AI 工具需要考慮功能需求、技術水平和成本預算等因素。這些工具為需要 AI 輔助的個人和企業提供了方便且有效率的解決方案。

See all articles