使用python抓取美女福利圖片

這篇文章干嘛的?

本屌在上網時偶然看到一個圖片網站,網站的尺度是這樣的:

圖片站首頁

里面的美女露骨而不露點,簡直是宅男福利。一時興起,決定將網站上的圖片down下來研究研究。正好最近在研究python,所以決定用這個抓取圖片存到本地,將圖片url存到 mongodb以防止以后用。

源碼項目github地址 : https://github.com/panacena/mmPictures/


爬蟲初識

網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動的抓取萬維網信息的程序或者腳本。
要學習Python爬蟲,我們要學習的共有以下幾點:

  • Python基礎知識
  • Python中urllib和urllib2庫的用法
  • Python正則表達式
  • Python爬蟲框架Scrapy
  • Python爬蟲更高級的功能
    當然,我們今天暫時不需要使用框架進行爬取,只用urllib2等庫進行操作。其它的一些關于爬蟲的一些基本信息,可以在這位大神的博客中學習到。學習爬蟲點我

開始爬取

確定URL開始抓取
  1. 我們以 http://www.zngirls.com/rank/sum/ 為起始頁面進行爬取,打開網頁后右鍵查看源代碼。
    打開這個url后,如圖1。我們需要關心的是紅色鏈接的內容。

    圖1

  2. 這個如何查找呢?如果你用的是360瀏覽器,在MM圖片那右擊,選擇“審查元素”。之后就可以查看到點擊MM頭像后跳轉的url地址和MM頭像的url地址 。圖2:


    圖2

3 . 現在還是沒有看到寫真的圖片,我們點擊MM的頭像,進入到了下圖的頁面 http://www.zngirls.com/girl/21751/ 可以看到如圖3這個頁面也沒有寫真的具體圖片,只是寫真的封面集合。不急,我們繼續點擊封面。

圖3

4 . 點擊封面后,http://www.zngirls.com/g/19671/1.html 進入的頁面就可以看到寫真的具體圖片了。這時我們就可以爬取圖片地址了。當然,這個也是分頁的,所以也需要獲取一共多少頁以及每一頁的url。

Paste_Image.png
開始碼代碼吧

從上面的步驟我們整理一下思路,大概分為以下三部:

1. 從起始頁面 http://www.zngirls.com/rank/sum/ 開始首選先獲取分頁的頁數以及每一頁的url,方便下一步獲取點擊MM獲取專輯url地址。接著解析每一頁的html,獲取每一頁中點擊MM頭像后跳轉的專輯集合頁面。

"""
從起始頁面 http://www.zngirls.com/rank/sum/ 開始獲取排名的頁數和每一頁的url

"""
def  mmRankSum():
    req = urllib2.Request("http://www.zngirls.com/rank/sum/", headers=header)
    html = urllib2.urlopen(req)
    htmldata = html.read()
    htmlpath = etree.HTML(htmldata)

    #首先獲取頁碼數,然后用循環的方式挨個解析每一個頁面
    pages = htmlpath.xpath('//div[@class="pagesYY"]/div/a/@href')


    for i in range( len(pages) -2 ):

        pagesitem="http://www.zngirls.com/rank/sum/"+ pages[i]
        mmRankitem(pagesitem)

"""
參數 url : 分頁中每一頁的具體url地址
通過穿過來的參數,使用  lxml和xpath 解析 html,獲取每一個MM寫真專輯頁面的url

"""
def mmRankitem(url):
    req = urllib2.Request(url, headers=header)
    html = urllib2.urlopen(req)
    htmldata = html.read()
    htmlpath = etree.HTML(htmldata)

    pages = htmlpath.xpath('//div[@class="rankli_imgdiv"]/a/@href')
    for i in range(len(pages)):

         print  "http://www.zngirls.com/" + pages[i]+"album/"
         getAlbums("http://www.zngirls.com/" + pages[i]+"/album/")

2. 從mmRankitem方法中獲取到的url中解析每一個MM寫真專輯圖片的具體地址,也就是寫真圖片列表的頁面。

"""
參數 albumsurl: 每一個MM專輯的頁面地址
通過穿過來的參數,獲取每一個MM寫真專輯圖片集合的地址

"""
def getAlbums(girlUrl):
    req = urllib2.Request(girlUrl, headers=header)
    html = urllib2.urlopen(req)
    htmldata = html.read()
    htmlpath = etree.HTML(htmldata)

    pages = htmlpath.xpath('//div[@class="igalleryli_div"]/a/@href')
    for i in range(len(pages)):
        print "http://www.zngirls.com/" + pages[i]

3. 從每一頁中獲取圖片的url,已經每一張圖片的名稱,方便下一步進行下載。

"""
參數 url : 每一個MM寫真專輯圖片集合的地址
通過穿過來的參數,首先先獲取圖片集合的頁數,然后每一頁解析寫真圖片的真實地址

"""
def getPagePicturess(albumsurl):
    req = urllib2.Request(albumsurl, headers=header)
    html = urllib2.urlopen(req)
    htmldata = html.read()
    htmlpath = etree.HTML(htmldata)
    pages = htmlpath.xpath('//div[@id="pages"]/a/@href')
    for i in range(len(pages)-2):
        savePictures("http://www.zngirls.com" + pages[i])

"""
參數 url : 每一個MM寫真專輯圖片集合的地址(進過分頁檢測)
通過穿過來的參數,直接解析頁面,獲取寫真圖片的地址,然后下載保存到本地。

"""
def savePictures(itemPagesurl):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
        , "Connection": "keep-alive"
        , "Referer": "image / webp, image / *, * / *;q = 0.8"
        ,"Accept":"image/webp,image/*,*/*;q=0.8"
    }
    req = urllib2.Request(itemPagesurl, headers=header)
    html = urllib2.urlopen(req)
    htmldata = html.read()
    htmlpath = etree.HTML(htmldata)
    print itemPagesurl
    pages = htmlpath.xpath('//div[@class="gallery_wrapper"]/ul/img/@src')
    for i in range(len(pages) ):
        print pages[i]
        pciturelist.append(pages[i])

4 .獲取每張圖片的url,可每張照片的名稱,然后下載到本地。

"""
參數 url : 每一個MM寫真專輯圖片集合的地址(進過分頁檢測)
通過穿過來的參數,直接解析頁面,獲取寫真圖片的地址,然后下載保存到本地。

"""
def savePictures(itemPagesurl):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
        , "Connection": "keep-alive"
        , "Referer": "image / webp, image / *, * / *;q = 0.8"
        ,"Accept":"image/webp,image/*,*/*;q=0.8"
    }
    req = urllib2.Request(itemPagesurl, headers=header)
    html = urllib2.urlopen(req)
    htmldata = html.read()
    htmlpath = etree.HTML(htmldata)
    print itemPagesurl
    pages = htmlpath.xpath('//div[@class="gallery_wrapper"]/ul/img/@src')

    names = htmlpath.xpath('//div[@class="gallery_wrapper"]/ul/img/@alt')
    for i in range(len(pages) ):
        print pages[i]
        pciturelist.append(pages[i])

        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
            , "Connection": "keep-alive"
            , "Referer": pages[i]
        }
        req = urllib2.Request(pages[i], headers=headers)

        urlhtml = urllib2.urlopen(req)

        respHtml = urlhtml.read()

        binfile = open('%s.jpg' % ( names[i] ) , "wb")
        binfile.write(respHtml);
        binfile.close();


5. 執行完畢后(時間可能會比較長),就可以在文件夾里面看到一張一張的圖片都下載完畢。再這里注意的是防止出現反爬蟲,可以用設置header或者代理等方式。

圖片下載到了文件夾中

沒有設置一些header等參數時,有時會出現如下這種情況,這種情況應該是網站有反爬蟲的機制。

反爬蟲

源碼項目github地址 : https://github.com/panacena/mmPictures/
這是本人學習python后寫的一個小例子。代碼寫的很爛。以后會學習Scrapy等框架然后在重新重構一下代碼。希望可以給個star~~~。
下載完后的圖片大概有36228 張圖片。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,533評論 6 427
  • 爬蟲文章 in 簡書程序員專題: like:128-Python 爬取落網音樂 like:127-【圖文詳解】py...
    喜歡吃栗子閱讀 21,907評論 4 411
  • 今天比往天回家要晚些,在學校耽誤了一下,回家以最快的速度將飯菜弄好。今天特意給兒子弄了個回鍋肉,香香甜甜孩子很喜歡...
    燦爛陽光1閱讀 226評論 0 4
  • 嶙峋走獸臥龍門,狹道九折鎖天脊。 飛流喧喧白麟遠,塊壘方方翠云低。 古棧奇出忽見路,鐵鎖長橫暗聞笛。 蟬聲唱遍懸飛...
    十年以期閱讀 458評論 0 0
  • 項目開發過程中經常會有圖形,圖表的制作,用PHP自帶的制圖函數已經不能滿足現在市場上的需求了。不會的小伙伴不用擔心...
    西貝巴巴閱讀 895評論 0 1