本文目錄一覽:
- 1、前端js爬蟲?
- 2、如何使用nodejs做爬蟲程序
- 3、爬蟲如何處理js動態
- 4、怎麼動態修改js中代碼?
前端js爬蟲?
純粹前端的js 是不能 跨域 獲取 cookie的
xxx.com 的js 代碼 只能得到 xxx.com的cookie,拿不到 yyy.com
當然如果你有辦法 在 yyy.com 寫入受到自己控制的 html文件,你就可以寫代碼去拿到 對應的cookie,但看你的需求 應該你沒有yyy.com 的許可權
所以 要結合其他方案,推薦一下兩種:
使用 electron ,electron 你可以認為是受js控制的瀏覽器引擎,所以你可以用它訪問 yyy.com 拿到cookie,再接著做你的事情
或者 使用 puppeteer(Google 官方出品的 headless Chrome node 庫)
Puppeteer 提供了一系列的 API,可以在無 UI 的情況下調用 Chrome 的各種功能,適用於爬蟲、自動化處理等各種情景。
如何使用nodejs做爬蟲程序
目標
抓取網站上的妹子照片。
第三方模塊
superagent : 第三方Nodejs 模塊,用於處理伺服器和客戶端的Http請求。
cheerio : 為伺服器端定製的Jquery實現。
思路
通過superagent 獲取目標網站的dom
通過cheerio對dom進行解析,獲得通用布局。
如果只是爬取一個頁面,則可以直接將目標頁面的目標元素獲取
如果是分頁或者多個頁面,可以通過循環獲得目標鏈接,進行多次抓取。
實現
這裡我們實現一個抓取網站妹子的照片。
目標網址: (對於該網站,並沒有惡意攻擊的意思.)
代碼如下:
//引入第三方和通用模塊
var fs = require(‘fs’);//為了將抓取的圖片存到本地,使用fs
var superagent = require(‘superagent’);//引入superagent
var cheerio = require(‘cheerio’);//引入jquery實現
var filePath = ‘/node/學習/sis/img/’;//定義抓取妹子文件存放路徑
var count = 0;//記錄抓取數量
var test = [];
//抓取一個頁面的實現。
var getOnePage = function(url){
//因為煎蛋對請求做了限制,所以將cookie加上了。如果你要訪問該網站的話,可以通過a href=”;tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9n1DdmWFhuj-9P1c1nWwb0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRLP1msP1TzPjTYnj0vnjfd” target=”_blank” class=”baidu-highlight”瀏覽器/a查找cookie 並進行替換
superagent.get(url)
.set({
‘user-agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36′
})
.set(‘cookie’,’500322148=53; Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454117846; Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454119909′)
.set({
‘accept’ : ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8’,
‘connection’ : ‘keep-alive’,
‘host’ : ‘jandan.net’
})
.end(function(err,sres){//這裡是對獲取的dom進行處理
if(err)throw err;
var $ = cheerio.load(sres.text);
var nextUrl = $(‘.previous-comment-page’).attr(‘href’);//獲得下一頁的鏈接,為了開始下一次請求
$(‘img’).each(function(index,ele){//循環該頁面的所有圖片並得到對應的鏈接,放進數組。
var u = ”;
if($(ele).attr(‘org_src’)){
u = $(ele).attr(‘org_src’);
}else{
u = $(ele).attr(‘src’);
}
test.push(u);
//通過superagent 獲取圖片數據,並保存到本地。
superagent.get(u).end(function(err,sres){
if(err)throw err;
//根據訪問路徑獲得文件名稱
var ttt = u.split(‘/’);
var name = ttt[ttt.length-1];
var path = filePath+name
fs.writeFile(path,sres.body,function(){
count++;
console.log(u);
console.log(‘已成功抓取..’+count+’張’);
});
});
});
if(null != nextUrl ” != nextUrl){ //何時開始下一次請求
getOnePage(nextUrl);
}
});
};
getOnePage(”);//觸發第一次請求開始
爬蟲如何處理js動態
我用Jsoup寫爬蟲,一般遇到html返回沒有的內容。但是瀏覽器顯示有的內容。都是分析頁面的http請求日誌。分析頁面JS代碼來解決。
1、有些頁面元素被隱藏起來了-換selector解決
2、有些數據保存在js/json對象中-截取對應的串,分析解決
3、通過api介面調用-偽造請求獲得數據
還有一個終極方法
4、使用phantomjs或者casperjs這種headless瀏覽器
怎麼動態修改js中代碼?
這裡只是片段,如果是一個封裝起來的屬性,是沒法修改的,我們只能將它當做一個對象來修改後,再執行。如:
var a = {
gConfig:{
url:”1.jpg”,
id:”gameDiv”,
size:”4*4″,
margin:1,
opacity:0.8
}
};
那麼修改url和opacity可以寫為a.gConfig.url = ‘newUrl’;a.gConfig.opacity = 0.9;也可以直接修改a.gConfig = {}。
直接修改文檔內容是不對的。
原創文章,作者:MEVB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139935.html