新聞中心
隨著互聯(lián)網(wǎng)的飛速發(fā)展,網(wǎng)絡上的信息量也越來越大,如果想獲取某些信息,手動訪問網(wǎng)頁逐一查找,無疑是非常耗時和無效的。此時,我們需要一種能夠自動化處理信息的方法,這就是數(shù)據(jù)爬取。

成都創(chuàng)新互聯(lián)2013年至今,先為鳳臺等服務建站,鳳臺等地企業(yè),進行企業(yè)商務咨詢服務。為鳳臺企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
數(shù)據(jù)爬取是指通過編寫程序自動訪問目標網(wǎng)站并且自動抓取需要的信息,將數(shù)據(jù)保存到本地,以便后續(xù)的分析和處理。今天我們介紹用Node.js實現(xiàn)數(shù)據(jù)爬取并存儲到數(shù)據(jù)庫的方法。
Node.js是一個基于Chrome V8引擎的JavaScript運行環(huán)境,它可以讓JavaScript運行在服務器端,具有異步I/O和事件驅動等特點,非常適合實現(xiàn)高并發(fā)、高吞吐量的網(wǎng)絡應用。我們可以利用Node.js中的第三方庫和工具,快速實現(xiàn)數(shù)據(jù)爬取,并將數(shù)據(jù)存儲到數(shù)據(jù)庫中。
1.準備工作
在開始實現(xiàn)之前,我們需要進行一些準備工作。
確保已經(jīng)安裝好Node.js和NPM,并且安裝了必要的依賴庫。我們需要用到以下庫:Request、Cheerio和Mongoose。
Request庫是Node.js用來處理HTTP請求的庫,可以用它來發(fā)送HTTP請求、獲取響應內(nèi)容等。Cheerio是一個Node.js實現(xiàn)的類似jQuery的庫,可以用它來解析HTML文檔,并提供類似jQuery的選擇器操作。Mongoose則是Node.js中使用最廣泛的Mongodb對象模型工具,它使得我們可以更加方便地對Mongodb進行操作。
如果你還沒有安裝這些庫,可以使用以下命令進行安裝:
“`
npm install request cheerio mongoose –save
“`
其中,–save參數(shù)是將庫的版本信息寫入package.json文件中,方便管理項目的依賴關系。
2.實現(xiàn)數(shù)據(jù)爬取
準備工作完成后,我們可以開始實現(xiàn)數(shù)據(jù)爬取和存儲。
假設我們需要從某個招聘網(wǎng)站上抓取一些招聘信息,以下是實現(xiàn)代碼的流程:
2.1 創(chuàng)建數(shù)據(jù)庫連接
我們需要使用Mongoose庫創(chuàng)建一個數(shù)據(jù)庫連接。這里我們使用MongoDB數(shù)據(jù)庫做演示??梢赃x擇本地安裝MongoDB服務,也可以使用云服務提供商的MongoDB服務。
創(chuàng)建數(shù)據(jù)庫連接的代碼如下:
“`
const mongoose = require(‘mongoose’);
mongoose.connect(‘mongodb://localhost:27017/test’, {useNewUrlParser: true});
“`
其中,’mongodb://localhost:27017/test’是MongoDB默認的連接地址,連接到名為test的數(shù)據(jù)庫。useNewUrlParser選項是為了避免一些警告信息。你可以根據(jù)實際情況修改這個地址來連接不同的數(shù)據(jù)庫。
2.2 發(fā)送HTTP請求并分析響應內(nèi)容
連接數(shù)據(jù)庫之后,我們可以使用Request庫來發(fā)送HTTP請求,獲取要抓取的網(wǎng)頁內(nèi)容。響應的內(nèi)容交給Cheerio庫來分析,提取我們所需的信息。
以下是發(fā)送請求和分析響應內(nèi)容的代碼:
“`
const request = require(‘request’);
const cheerio = require(‘cheerio’);
request(‘https://www.example.com/recruitment’, (err, res, body) => {
if (err || res.statusCode !== 200) {
console.log(`獲取頁面失敗,代碼:${res.statusCode},錯誤:${err}`);
return;
}
const $ = cheerio.load(body);
// 提取需要的信息
});
“`
這段代碼會請求’https://www.example.com/recruitment’頁面,如果請求錯誤或響應狀態(tài)碼不是200,則輸出錯誤信息。如果請求成功,將響應內(nèi)容傳給cheerio.load()函數(shù)來解析獲取的HTML文檔。
接下來,我們需要根據(jù)目標網(wǎng)站的HTML結構和CSS樣式,選擇合適的選擇器來選擇需要的信息。例如,假設我們想抓取招聘信息的標題和工作地點,對應的選擇器如下:
“`
const jobTitleSelector = ‘.job a’;
const jobLocationSelector = ‘.location’;
“`
我們可以使用$()函數(shù)來選擇這些DOM元素:
“`
const jobList = [];
$(jobTitleSelector).each((i, el) => {
const jobTitle = $(el).text();
const jobLocation = $(jobLocationSelector).eq(i).text();
jobList.push({ jobTitle, jobLocation });
});
“`
這里我們用each()函數(shù)來遍歷選中的元素,獲取招聘信息的標題和工作地點,并存儲到jobList數(shù)組中。最后數(shù)據(jù)就被成功地抓取下來了!
2.3 存儲數(shù)據(jù)到數(shù)據(jù)庫
最后一步,我們需要將抓取到的數(shù)據(jù)存儲到數(shù)據(jù)庫中。我們使用Mongoose庫來操作數(shù)據(jù)庫。
我們需要定義一個Schema來描述要存儲的數(shù)據(jù)結構:
“`
const jobSchema = new mongoose.Schema({
jobTitle: String,
jobLocation: String,
});
“`
然后,我們需要將Schema和對應的數(shù)據(jù)相關聯(lián):
“`
const Job = mongoose.model(‘Job’, jobSchema);
“`
我們就可以將抓取到的數(shù)據(jù)存儲到數(shù)據(jù)庫中:
“`
jobList.forEach(job => {
const newJob = new Job(job);
newJob.save(err => {
if (err) {
console.log(`保存失?。?{err}`);
} else {
console.log(`保存成功:${ON.stringify(job)}`);
}
});
});
“`
這里我們循環(huán)遍歷jobList數(shù)組中的每個招聘信息,創(chuàng)建一個新的Job對象并保存到數(shù)據(jù)庫中。如果保存成功,則輸出成功信息;如果保存失敗,輸出錯誤信息。
3.
本文介紹了如何利用Node.js實現(xiàn)數(shù)據(jù)爬取,并將數(shù)據(jù)存儲到數(shù)據(jù)庫中。我們通過使用Request、Cheerio和Mongoose等庫,快速實現(xiàn)了從網(wǎng)頁上抓取數(shù)據(jù)的功能,并將數(shù)據(jù)存儲到MongoDB中。當然,數(shù)據(jù)爬取也存在一些法律和道德等問題,需要注意相關規(guī)定和約束。
相關問題拓展閱讀:
- nodejs+html+mongodb 怎么從數(shù)據(jù)庫中讀取數(shù)據(jù),然后放到HTML頁面中,可供網(wǎng)頁查看?更好能有實例
- nodejs怎么才能用爬蟲爬取https網(wǎng)頁
nodejs+html+mongodb 怎么從數(shù)據(jù)庫中讀取數(shù)據(jù),然后放到HTML頁面中,可供網(wǎng)頁查看?更好能有實例
nodejs操作mongodb查詢所有數(shù)據(jù)的方敗漏手法:
var MongoClient = require(‘mongodb’).MongoClient;
var DB_CONN_STR = ‘
var selectData = function(db, callback) {
//連接到表
var collection = db.collection(‘察嫌tb2’);
//查詢數(shù)據(jù)
var whereStr = {“name”:’wilson001′};
collection.find(whereStr).toArray(function(err, result) {
if(err)
{
console.log(‘Error:’+ err);
return;
}
callback(result);
});
}
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log(“連接成功!搜凳”);
selectData(db, function(result) {
console.log(result);
db.close();
});
});
nodejs怎么才能用爬蟲爬取https網(wǎng)頁
爬蟲爬https站點處理,方法步驟如下:
1、百度蜘蛛爬蟲Spider爬取HTTPS網(wǎng)站
1)、根據(jù)網(wǎng)頁中的超鏈接是否是HTTPS,網(wǎng)絡中會有一些超鏈,如果是HTTPS會認為是HTTPS站點。
2)、根據(jù)站長平臺提交入口的提交方式,例如主動提交,如果在文件當中提交的是HTTPS鏈接會以HTTPS的形式衡搭來發(fā)現(xiàn)。
3)、參考前鏈的抓取相對路徑,之一個網(wǎng)頁是HTTPS的,網(wǎng)站內(nèi)容里面的路徑提供的是相對路徑,會認為這種鏈接是HTTPS。
4)、參考鏈接的歷史狀況,使用這種方式的原因主要是為了糾錯,如果錯誤提取HTTPS會遇到兩種情況,一種因為HTTPS不可訪問會抓取失敗,第二即使能抓成功可能展現(xiàn)出來的可能不是站長希望的,所以會有一定的糾錯。咐茄拿
2、HTTPS鏈接的抓取
現(xiàn)在比較常見的兩種,之一種是純HTTPS抓取,就是它沒有HTTP的版本,第二個是通過HTTP重定向到HTTPS,這兩種都能正常的進行抓取跟HTTP抓取的納肢效果是一樣的。
3、HTTPS的展現(xiàn)
對于HTTPS數(shù)據(jù),展現(xiàn)端會有明顯的提示
沒有代碼伍如前顫,不過我猜你用錯了模塊
const http = require(‘http’)
const https = require(‘https’腔悔啟) // https用這個
nodejs爬取數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關于nodejs爬取數(shù)據(jù)庫,用Node.js實現(xiàn)數(shù)據(jù)庫爬取,nodejs+html+mongodb 怎么從數(shù)據(jù)庫中讀取數(shù)據(jù),然后放到HTML頁面中,可供網(wǎng)頁查看?更好能有實例,nodejs怎么才能用爬蟲爬取https網(wǎng)頁的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務、應用軟件開發(fā)、網(wǎng)站建設推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎服務!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。創(chuàng)新互聯(lián)——四川成都IDC機房服務器托管/機柜租用。為您精選優(yōu)質idc數(shù)據(jù)中心機房租用、服務器托管、機柜租賃、大帶寬租用,高電服務器托管,算力服務器租用,可選線路電信、移動、聯(lián)通機房等。
分享文章:用Node.js實現(xiàn)數(shù)據(jù)庫爬取(nodejs爬取數(shù)據(jù)庫)
瀏覽路徑:http://www.dlmjj.cn/article/cogiooj.html


咨詢
建站咨詢
