国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

不再羨慕python,nodejs爬蟲擼起袖子就是干,爬取宅男女神網(wǎng)大姐姐的高清圖片!

rubyshen / 2349人閱讀

摘要:年前無心工作,上班刷知乎發(fā)現(xiàn)一篇分享爬蟲的文章。另外攜帶的數(shù)據(jù)是用來告訴服務(wù)器當前請求是從哪個頁面請求過來的。

年前無心工作,上班刷知乎發(fā)現(xiàn)一篇分享python爬蟲的文章。

感覺他爬取的網(wǎng)站里的妹子都好好看哦,超喜歡這里的,里面?zhèn)€個都是美女。

無小意丶:自我發(fā)掘爬蟲實戰(zhàn)1:宅男女神網(wǎng)妹子圖片批量抓取,分類保存到本地和MongoDB數(shù)據(jù)庫

無奈python雖然入門過但太久沒用早已荒廢,最近在用nodejs重構(gòu)后臺接口,遂嘗試用nodejs實現(xiàn)個爬蟲。

先上幾張圖:

爬幾個相冊示范一下

都是高清無碼大圖哦

好了,開始準備工作吧,少年!

喂!我說的是準備工作環(huán)境!你,你,還有你,你們把手上的紙巾放下!

準備工作:

系統(tǒng)環(huán)境:mac (作為一個前端,應(yīng)該不用我解釋了吧?)
運行環(huán)境:node (作為一個前端,應(yīng)該不用我解釋了吧??)
所需模塊:request-promise、cheerio、fs
編輯器:vscode (誰用誰知道)

簡單了解一下這幾個nodejs的模塊:

request-promise----Node.js的一個網(wǎng)絡(luò)請求模塊,使用超簡單:

   var request = require("request-promise");
    request("http://www.google.com")
    .then(function (htmlString) {
    console.log(htmlString)
    })
    .catch(function (err) {
    });

任何響應(yīng)都可以輸出到文件流:

request("http://google.com/doodle.png").pipe(
  fs.createWriteStream("doodle.png")
)

cheerio----為服務(wù)器特別定制的,快速、靈活、實施的jQuery核心實現(xiàn):

api類似jQuery,使用超簡單

const cheerio = require("cheerio")
const $ = cheerio.load("

Hello world

") $("h2.title").text("Hello there!") $("h2").addClass("welcome") $.html() //=>

Hello there!

fs----Node.js 文件系統(tǒng)

可以創(chuàng)建目錄,創(chuàng)建文件,讀取文件等。

網(wǎng)頁分析:

分析目標網(wǎng)站的相冊網(wǎng)頁地址
因為python文章的作者已經(jīng)很詳細的分析了網(wǎng)站,所以我就簡單分析一下。

隨便打開幾個相冊,可以看到都是這樣的規(guī)則:

"https://www.****.com/g/****/"

所以我們就可以確定要爬取的基本url:

const base_url = "https://www.****.com/g/";//爬取相冊網(wǎng)頁的基本網(wǎng)址

然后再看幾乎每個相冊底部都有頁碼,而我們要抓取的是整個相冊,所以就要考慮分頁的情況,點開分頁,我們看到分頁的url是這樣的:

"https://www.****.com/g/****/*.html"


業(yè)務(wù)邏輯:

實戰(zhàn)代碼:

app.js 輪詢及代碼結(jié)構(gòu)

const nvshens = require("./co");
const base_url = "https://www.nvshens.com/g/";//爬取相冊網(wǎng)頁的基本網(wǎng)址

let index = 1;
let start = 25380;
const end = 30000;

const main = async (URL) => {
  //1.請求網(wǎng)址
  const data = await nvshens.getPage(URL);
  //2.判斷是否存在相冊
  if (nvshens.getTitle((data.res))) {
    //3.下載照片
    await nvshens.download(data.res);
    //4.請求分頁
    index++;
    const new_url = `${base_url}${start}/${index}.html`;
    main(new_url);
  } else {
    index = 1;
    console.log(`${base_url}${start}頁面已完成`)
    start++;
    if (start < end) {
      //5.請求下一個網(wǎng)址
      main(base_url + start);
    } else {
      console.log(`${base_url}${end}所有頁面已完成`)
    }
  }
};

main(base_url + start);

co.js //業(yè)務(wù)代碼

var request = require("request-promise"); //網(wǎng)絡(luò)請求
const cheerio = require("cheerio");//操作dom
const fs = require("fs");//讀寫文件

const headers = {
  "Referer": "https://www.nvshens.com/g/24656/"
}
//因為一些網(wǎng)站在解決盜鏈問題時是根據(jù)Referer的值來判斷的,所以在請求頭上添加Referer屬性就好(可以填爬取網(wǎng)站的地址)。
//另外Referer攜帶的數(shù)據(jù) 是用來告訴服務(wù)器當前請求是從哪個頁面請求過來的。

const basePath = "/Users/用戶名/Desktop/mm/";
//自定義mac本地下載目錄,需預先創(chuàng)建,windows路徑可參考評論
let downloadPath;
let pageIndex = 1;


module.exports = {

  //請求頁面
  async getPage(url) {
    const data = {
      url,
      res: await request({
        url: url
      })
    }
    return data;
  },

  //判斷頁面是否存在相冊
  getTitle(data) {
    const $ = cheerio.load(data);
    if ($("#htilte").text()) {
      downloadPath = basePath + $("#htilte").text();
      //創(chuàng)建相冊
      if (!fs.existsSync(downloadPath)) {
        fs.mkdirSync(downloadPath);
        console.log(`${downloadPath}文件夾創(chuàng)建成功`)
      }
      return true;
    } else {
      return false;
    }
  },

  //下載相冊照片
  async download(data) {
    if (data) {
      var $ = cheerio.load(data);
      $("#hgallery").children().each(async (i, elem) => {
        const imgSrc = $(elem).attr("src");
        const imgPath = "/" + imgSrc.split("/").pop().split(".")[0] + "." + imgSrc.split(".").pop();
        console.log(`${downloadPath + imgPath}下載中`)
        const imgData = await request({
          uri: imgSrc,
          resolveWithFullResponse: true,
          headers,
        }).pipe(fs.createWriteStream(downloadPath + imgPath));
      })
      console.log("page done")
    }
  },

}

跑起來

node app.js

幾個函數(shù)就可以實現(xiàn),是不是很簡單呢?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107301.html

相關(guān)文章

  • 首次公開,整理12年積累博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • 所見即所得,實現(xiàn)一個有趣動畫效果

    摘要:每一個方格就是數(shù)組的一個個體。收工完成效果因為我實在是不想找那么多圖片,大概只拷貝了十份,然后乘以,所以會出現(xiàn)一個頭像重復三次的情況源碼。 我看到了什么 在看淘寶前端團隊的博客的時候,無意中點進了關(guān)于我們這個頁面,其中有個動畫我覺得很有趣,也很通用,感覺在哪里都可以使用一樣,效果如下圖所示:showImg(https://segmentfault.com/img/bVWwzI?w=32...

    xuxueli 評論0 收藏0
  • 所見即所得,實現(xiàn)一個有趣動畫效果

    摘要:每一個方格就是數(shù)組的一個個體。收工完成效果因為我實在是不想找那么多圖片,大概只拷貝了十份,然后乘以,所以會出現(xiàn)一個頭像重復三次的情況源碼。 我看到了什么 在看淘寶前端團隊的博客的時候,無意中點進了關(guān)于我們這個頁面,其中有個動畫我覺得很有趣,也很通用,感覺在哪里都可以使用一樣,效果如下圖所示:showImg(https://segmentfault.com/img/bVWwzI?w=32...

    fyber 評論0 收藏0
  • Python 從零開始爬蟲(五)——初遇json&爬取某寶商品信息

    摘要:能看到這里說明快進入動態(tài)網(wǎng)頁爬取了,在這之前還有一兩個知識點要了解,就如本文要講的及其數(shù)據(jù)提取是什么是輕量級的文本數(shù)據(jù)交換格式,符合的格式的字符串叫字符串,其格式就像中字符串化后的字典,有時字典中還雜著列表字典,但是里面的數(shù)據(jù)都被雙引號包著 ??能看到這里說明快進入動態(tài)網(wǎng)頁爬取了,在這之前還有一兩個知識點要了解,就如本文要講的json及其數(shù)據(jù)提取 JSON 是什么 ??json是輕量級...

    2bdenny 評論0 收藏0
  • Python爬蟲入門教程 2-100 妹子圖網(wǎng)站爬取

    摘要:為了寫好爬蟲,我們需要準備一個火狐瀏覽器,還需要準備抓包工具,抓包工具,我使用的是自帶的,加上,這兩款軟件的安裝和使用,建議你還是學習一下,后面我們應(yīng)該會用到。 妹子圖網(wǎng)站----前言 從今天開始就要擼起袖子,直接寫Python爬蟲了,學習語言最好的辦法就是有目的的進行,所以,接下來我將用10+篇的博客,寫爬圖片這一件事情。希望可以做好。 為了寫好爬蟲,我們需要準備一個火狐瀏覽器,還需...

    zqhxuyuan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<