1. 程式人生 > >教你用Python爬取妹子圖APP

教你用Python爬取妹子圖APP

教你用Python爬美之圖APP(妹子圖)

爬取結果

這裡寫圖片描述

程式只運行了2h,最後認為程式沒有問題了就關了(我可不是去殺生去了……

執行環境

  • Python 3.5+

  • Windows 10

  • VSCode

如何使用

下載專案原始碼

https://github.com/cexll/Mzitu.net_Spider.git

安裝依賴

$ pip install requests

執行

python3 Spider.py
...
程式共耗時: 80.55049586296082(不儲存圖片到本地的時間)

這裡寫圖片描述
儲存圖片需要網路,伺服器等方面,所以不方便測試一般2h~3h能爬完整站

資訊來源

這裡寫圖片描述

點選APP這個導航,然後點選下載APP,得到一條資訊
這裡寫圖片描述

開啟之後

這裡寫圖片描述

http://apk.meizitu.net/app/mzitu.apk

APP 下載連結, 嗯.APP開啟之後大致就是這個樣子

這裡寫圖片描述

這裡寫圖片描述

沒有涉黃吧 ……………

只想要APP的同學到這裡就可以離開了/滑稽

思路

最近學習了APP抓取,就想著來試試,結果還是非常順利,好的,接下來開始

這裡寫圖片描述

抓包工具 Charles, 通過手機或者模擬器連線 Charles 8888 埠, 安裝好證書就能通過電腦監控手機的網路請求資訊

提供下載地址: https://www.charlesproxy.com/download/

這裡寫圖片描述

軟體開啟就是這個樣子,具體怎麼安裝證書,我這裡就不講解了,網路上教程還是挺多的

開啟 Proxy -> Proxy Settings

這裡寫圖片描述

檢查一下埠是否開啟,接下來通過手機和模擬器連線本地,我這裡就通過手機來演示了,我認為手機還是比模擬器方便的

  1. 首先Windows 開啟CMD ,輸入 ipconfig ,找到乙太網 IPV4

    這裡寫圖片描述

找到 乙太網介面卡 乙太網 別找到其他的了, 我這裡的 IPV4 地址192.168.1.49 ,所以手機應該設定代理為 IP 192.168.1.49 埠為 8888, 對了 ,手機需要連線電腦同一網路下的WIFI或者電腦的熱點WIFI ,否則是不行的

  1. Linux/Unix 使用者應該就不用我說了吧,都是大佬 開啟終端, 輸入 ifconfig

    [email protected]:~# ifconfig -a
    eth0      Link encap:Ethernet  HWaddr 00:**:3e:**:45:bc  
             inet addr:172.**.**.***  Bcast:172.**.**.***  Mask:255.255.192.0
             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
             RX packets:20**66 errors:0 dropped:0 overruns:0 frame:0
             TX packets:17**64 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 txqueuelen:1000 
             RX bytes:117837880 (117.8 MB)  TX bytes:209340524 (209.3 MB)
    
    lo        Link encap:Local Loopback  
             inet addr:127.0.0.1  Mask:255.0.0.0
             UP LOOPBACK RUNNING  MTU:6**36  Metric:1
             RX packets:3**18 errors:0 dropped:0 overruns:0 frame:0
             TX packets:3**18 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 txqueuelen:1 
             RX bytes:25**728 (2.5 MB)  TX bytes:2577728 (2.5 MB)

    這裡 eth0 和其他的不要搞混淆了

  2. 我是魅族手機大概演示一下設定, 開啟WIFI -> 找到 WIFI名稱後的設定小按鈕 -> 找到 代理設定 點選進去,把 IP , 設定好 ,結果如圖

這裡寫圖片描述

配置好後,開啟 Charles,發現多了非常多資料,一閃一閃

這裡寫圖片描述

OK 這一步完成,接下來就是 點選一下左上角的黃色掃帚 ,紅色按鈕左邊,清空一下列表,然後開啟 美之圖APP,獲取資訊

開啟APP之後一直往下拉,先載入一些資料出來看看, 這時候要仔細看看那一條資訊一直在閃

這裡寫圖片描述

這是開啟之後得到的資料,大致可以看出來,因為我們是要抓 meizitu(美之圖),所以資料肯定不是qq啥的

這時候拿著手機,使勁往下拉,看看那個在動, 這時候發現

這裡寫圖片描述

http://adr.meizitu.net這條資料一直在閃,我們開啟看看

這裡寫圖片描述

咦,這種資料好熟悉啊, 好像Ajax開啟看一下

這裡寫圖片描述

一目瞭然了

再來看看資料規律

posts?page=3&per_page=5
posts?page=4&per_page=5
posts?page=5&per_page=5
posts?page=6&per_page=5
posts?page=7&per_page=5
posts?page=8&per_page=5
posts?page=9&per_page=5
...

page 就是頁數, per_page 是什麼呢,複製他的URL到瀏覽器看看

這裡寫圖片描述

好像摸到規律了有沒有, per_page 應該是每次載入得到的資料,我們把 5 改一下試試

這裡寫圖片描述

結果顯然是的,這時候我們肯定都想知道那他最大能提取多少呢,我試過了 最大是100

OK結束了,寫程式碼了……你確定不認真看看資料裡面的資訊嗎?

我們開啟看看裡面有些什麼東西

這裡寫圖片描述

這東西…需要打馬賽克嗎 ???

我之前直接提取 thumb_src ,抓取圖片到最後發現圖片沒有多少,只有1.8G, 這就感覺很不對了,我開啟 APP 發現每一個美女最少都有20張圖片,但是到了這裡怎麼就只有一張了呢?

這時候 發現了img_num,這個數目應該就是圖片的張數,但是還是無法解決(這裡大佬看了別嫌我笨啊,我第一次遇到這種情況)

然後我發現 thumb_src最後2位數,,,,,,,,,,,,,,,,試試,結果一試就成了

這時候大體的流程就完成了

程式碼

def get_index(page, per):
    """
    開啟url得到JSON
    :param page: 頁數
    :param per: 數量
    """
    url = 'http://adr.meizitu.net/wp-json/wp/v2/posts?page=' + str(page) + '&per_page=' + str(per)
    print(url)
    try: 
        req = requests.get(url)
        if req.status_code == 200:
            imgs = req.json()
            for item in imgs:
                img_num = item.get('img_num')
                img_url = item.get('thumb_src')
                title = item.get('title')
                for i in range(1, img_num+1):
                    if i >= 10:
                        u = img_url[0:-6]
                        ur = u + str(i) + '.jpg'
                        print("圖片總數: {}, 圖片地址: {}, 圖片標題: {}".format(img_num, ur, title))
                        # 儲存到JSON
                        save_to_json(ur, title)
                        # 儲存圖片到本地
                        save_image(ur)
                    else:
                        u = img_url[0:-5]
                        ur = u + str(i) + '.jpg'
                        print(ur, title)
                        print("圖片總數: {}, 圖片地址: {}, 圖片標題: {}".format(img_num, ur, title))
                        # 儲存到JSON
                        save_to_json(ur, title)
                        # 儲存圖片到本地
                        save_image(ur)
    except ConnectionError:
        pass

程式碼大概意思是通過開啟URL得到JSON資料返回,解析裡面的圖片URLimg_num,再通過迴圈從1img_num(我這裡寫的簡單粗暴,有更方便的方法可以告訴我),圖片URL後面通過切片來拼接圖片的連結

然後通過將標題圖片URL儲存到本地,圖片下載到本地,通過兩個函式實現,如果不下載圖片

不需要多少時間,但下載圖片時間需要久一點,這裡使用非同步下載圖片應該非常快,但我認為做爬蟲也要有爬蟲的尊嚴,小站就別大批量的去訪問了

執行結果(不儲存圖片)

root@iZwz96yoph60zayn2arjstZ:/home/admin/in/Mzitu.net_Spi_Spider# ls -lh
total 17M
-rw-r--r-- 1 root  root   17M Aug 30 11:18 18 result.json
-rw
-rwxrwxr-x 1 admin admin 2.3K Aug 29 22:23 23 Spider.py

這是在伺服器下執行只儲存資訊到本地,全站圖片資料有17M

最後

這裡寫圖片描述

再最後,我把我儲存到本地的圖片打包放到百度網盤了,有需要的去取…別問我那麼大什麼時候能下載完成,點這裡

網盤地址: 這裡 提取碼:(chhi)

由於打包在一個壓縮包太大了,而且也無法上傳,就分了4份,每一份1G左右,每一張圖片不重複

相關推薦

Python妹子APP

教你用Python爬美之圖APP(妹子圖) 爬取結果 程式只運行了2h,最後認為程式沒有問題了就關了(我可不是去殺生去了…… 執行環境 Python 3.5+ Windows 10 VSCode 如何使用 下載專案原始碼 https

python喜馬拉雅FM音訊,乾貨分享~

前前言 喜馬拉雅已經更換標籤,我重新更新了下程式碼,文章暫時未改,因為思路還是如此,需要的可以掃一下文末公眾號二維碼(本人會在上面發表爬蟲以及java的文章還有送書等資源福利哦),也可以直接搜尋公眾號“ 猿獅的單身日常”,好了廣告結束... 前言 之前寫過爬取圖片的一篇文章,這回來看看如

Python豆瓣圖書Top250

質量、速度、廉價,選擇其中兩個 這篇文章將會用到上一篇文章所講的內容,如果沒有看過可以去看一下教你用Python寫excel 今天我們要做的就是用Python爬取豆瓣圖書Top250,先開啟網站看一下 今天不談這豆瓣圖書top250垃圾不垃圾的問題,只看看怎麼用p

PythonQQ音樂上的付費專輯

Hello,there!好久沒寫爬蟲的部落格啦,今天來寫一下怎麼爬取QQ音樂上的付費專輯(理論上所有專輯都可以)。想爬QQ音樂是因為實在沒錢買那些專輯,太多想聽的了!! 附上執行結果截圖: 先說一下需要的環境: 系統是:基於Linux的DeepinOS桌面版15

Python-妹子(單執行緒和多執行緒版本)

一、參考文章     Python爬蟲之——爬取妹子圖片     上述文章中的程式碼講述的非常清楚,我的基本能思路也是這樣,本篇文章中的程式碼僅僅做了一些異常處理和一些日誌顯示優化工作,寫此文章主要是當做筆記,方便以後查閱,修改的地方如下: 1、異常處理

富貴PHP掘金文章

前言 最近忙完了專案比較空就打算深入學習一些關於爬蟲的知識,以前讀書的時候就喜歡用爬蟲去爬一些學習網站(波多野**老師)。寫這篇部落格是想對之前學習的一些爬蟲知識做一個梳理和交流。希望有大佬指出不足,幫我成長。 新手村任務 下面這些是我2018年這半年業餘時間研究的一些小東西,比較適合剛

Python 妹子(注意身體/滑稽)

... #!/usr/bin/env python import urllib.request from bs4 import BeautifulSoup def crawl(url): headers = {'User-Agent':'Mozilla/5.0 (Windows; U; W

python啦圖片

一、程式碼部分 # -*- coding:utf-8 -*- '''1、python版本 python3.6 2、IDE PyCharm 2017.3 ''' import requests imp

15分鐘,Python網站資料,並用BI視覺化分析!

作為一名在資料行業打拼了兩年多的資料分析師,雖然目前收入還算ok,但每每想起房價,男兒三十還未立,內心就不免彷徨不已~ 兩年時間裡曾經換過一份工作,一直都是從事大資料相關的行業。目前是一家企業的BI工程師,主要工作就是給業務部門出報表和業務分析報告。 回想自己過去的工作成績也還算是不錯的,多

Python協程妹子(內有福利,懂得~)

split 基本 保存文件 切換 代碼執行 怎麽辦 什麽 head .cn 項目說明:   1、項目介紹     本項目使用Python提供的協程+scrapy中的選擇器的使用(相當好用)實現爬取妹子圖的(福利圖)圖片,這個學會了,某榴什麽的、pow(2, 10)是吧!

Swaggypython實現NBA資料統計的

相信很多喜歡NBA的小夥伴們經常會關注NBA的資料統計,今天我就用虎撲NBA的得分榜為例,實現NBA資料的簡單爬取。https://nba.hupu.com/stats/players是虎撲體育的NBA球員得分榜:當我們右鍵檢視該網站的原始碼時,會發現所有的資料統計都存放在&

爬蟲高玩Python每秒鐘下載一張高清大,快不快?

on() print async tpc 多說 xxx ima 所有 mkdir 如果爬蟲需要展現速度,我覺得就是去下載圖片吧,原本是想選擇去煎蛋那裏下載圖片的,那裏的美女圖片都是高質量的,我稿子都是差不多寫好了的,無奈今天重新看下,妹子圖的入口給關了。 至於

Python 多執行緒京東商城商品評論(代理ip請閱讀上一篇)

爬蟲永不停息 最近改進上一篇的爬蟲,不爬豆瓣了,改爬一爬京東評論,先放幾張圖研究看看先。 研究了一下,發現商品的id就是連結.html前面的數字。我們把它複製貼上下拉 1,對上一篇的代表進行修改和新增 class Spider(): def

Python 爬蟲入門之妹子

Python 爬蟲入門之爬取妹子圖 來源:李英傑  連結: https://segmentfault.com/a/1190000015798452   聽說你寫程式碼沒動力?本文就給你動力,爬取妹子圖。如果這也沒動力那就沒救了。   GitHub 地址:&

下午不知道吃什麼?Python美團外賣評論幫選餐!

一、介紹 朋友暑假實踐需要美團外賣APP評論這一份資料,一開始我想,這不就抓取網頁原始碼再從中提取資料就可以了嗎,結果發現事實並非如此,情況和之前崔大講過的分析Ajax來抓取今日頭條街拍美圖類似,都是通過非同步載入的方式傳輸資料,不同的是這次的是通過JS傳輸,其他的基本思路基本一致,希望那些資料

獨家 | 手把手Python進行Web抓(附程式碼)

作為一名資料科學家,我在工作中所做的第一件事就是網路資料採集。使用程式碼從網站收集資料,當時對我來說是一個完全陌生的概念,但它是最合理、最容易獲取的資料來源之一。經過幾次嘗試,網路抓取已經成為我的第二天性,也是我幾乎每天使用的技能之一。 在本教程中,我將介紹一個簡單的例子,說明如何抓取一個網站,

10分鐘Python玩轉微信之抓好友個性簽名製作詞雲

01 前言+展示 各位小夥伴我又來啦。今天帶大家玩點好玩的東西,用Python抓取我們的微信好友個性簽名,然後製作詞雲。怎樣,有趣吧~好了,下面開始幹活。我知道你們還是想先看看效果的。 後臺登入: 詞雲: 02 環境準備 Python版本:3.6.0系統平臺:W

python 多程序妹子

    程式碼需要自行修改的有:     圖片儲存位置、程序池的容量(建議cpu幾個核就設定為少,我的是4核)     可以在主函式簡單修改 ''' author:James-J time:2018/09/20 version: v2

Python網頁上的小說,讓從此告別書荒!

eset 爬取網頁 網站 鏈接 表頭 寫入 改變 span 人生 人生苦短,我用Python。有道愛看小說的小夥伴們,在看小說的期間總會遇到那麽一段書荒期,在這段期間想看書卻找不到,要麽就是要VIP,要麽就是下載不了。所以學會爬取網站上的小說是很有必要的,今天就以爬取筆趣閣