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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MEVB的頭像MEVB
上一篇 2024-10-04 00:23
下一篇 2024-10-04 00:23

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python爬蟲可以爬哪些網站

    Python是被廣泛運用於數據處理和分析領域的編程語言之一。它具有易用性、靈活性和成本效益高等特點,因此越來越多的人開始使用它進行網站爬取。本文將從多個方面詳細闡述,Python爬…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29

發表回復

登錄後才能評論