自學抓去淘女郎全部模特美女的圖片 手稿

在百度傳課上看到抓淘女郎模特照片,我看的免費視頻沒有看到抓去全部的圖片,因此本身用剛學到的知識,把完整。
html

1,代碼完成,抓到的最終效果以下:python





開始寫代碼:json

1,分析網頁:函數

http://mm.taobao.com/json/request_top_list.htm?type=0&page= 這個page=1到page=4000均可以。因爲找不到上一層網頁,因此沒辦法判斷具體的頁數是多少。學習

個人解決辦法是新建文件夾的時候,因爲出現一樣的模特名字的文件,因此抓取會自動報錯和中止測試

2,主代碼:網站

--------------------------------------------------------------------------url

i=1spa

mmurl='http://mm.taobao.com/json/request_top_list.htm?type=0&page='code

while i<5:

    url=mmurl+str(i) #獲得網站地址

    cont=urlcont(url) #獲得第一頁內容    

    t=getHrefs(cont)  #找到第一頁美女網站地址列表

    y=getImgSrcs(t) #找到圖片地址,並存檔到對應文件夾內

    i+=1

    print'理論上下載圖片張數:%s' %y

----------------------------------------------------------------------

這裏我值設置了抓去前4頁面的模特的代碼,共40個模特,0頁面和1頁面是相同的。貌似是個無限循環啊。(後面能夠把模特名字做比較,判斷是否能夠break,因爲我沒有抓到最後一頁,4000X10X120張圖片,個人硬盤估沒了,全部沒打算寫break).下面的代碼都是按順序接着來的,不要在意我這個新手的奇怪命名哦。

------------------------------------------------------------------------

#-*- coding: gbk -*-  

import sys

import urllib2

import re

import os

from xinbuxing import Creatnewtxt


def urlcont(url):

    up=urllib2.urlopen(url)

    cont=up.read()

    print cont

    return cont  #得到內容

----------------------------------------------------------------------

函數urlcont(),定義了打開,並閱讀網頁源代碼。

有一點必須說明,cont有時候會變成淘寶的登入頁面,不知道是反爬仍是規定須要上線時間怎麼的。遇到這種狀況通常隔着6分鐘在運行就能夠了。

---------------------------------------------------------------------------

def getHrefs(cont):

    re1=r'a href="(http:.*\.htm)" target'

    c=re.compile(re1)

    urlLists=re.findall(c,cont)

    print '美女主頁列表:%s' %urlLists

    print '美女主頁張數:%s' %len(urlLists)

    print'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'

    return urlLists #美女全部網站地列表

-----------------------------------------------------------------------------------

定義getHrefs(),來得到美女們的網網址

------------------------------------------------------------------------------------

def getName(cont):

    

    name=[]

    head=cont.find('<title>')

    tail=cont.find('</title>',head+1)

    c=cont[head+7:tail]

    s=c.replace(' ', '')

    #print s

    return s

-------------------------------------------------------------------------

若是你仔細看模特網頁的源代碼,會發現<title>淘女郎 - 尹明月 </title>,我這個正則就是要「淘女郎 - 尹明月。這個函數就是得到模特的名字。下面是最重要的部分了

--------------------------------------------------------------------------------

def getImgSrcs(htmlist):

    import urllib

    y=0

    for age in htmlist:

        print '這個美女的地址是:%s' %age

        print '----------------------美女主頁--------------------:%s' %age

        cont=urlcont(age)

        #print'------------------------------------------------'

        #print cont

        g=getName(cont)

        

               

        

        #regcall=r'^1\d{10}\b'

        #MMcall=re.compile(regcall)

        #mmnum=re.findall(MMcall,cont)

        

        reg=r'src="(\S.*?\.jpg)"'

        imageurl=re.compile(reg)

        idic={}

        idic[age]=re.findall(imageurl,cont)

        #print idic[age]     #得到美女圖片列表

        print '======================'

        #print 's=%s' %s

        #ss=s.decode('gbk')

        #sss=s.replace(' ',' ')

        #print ss

        print g

        

        os.mkdir('D:\\MM-PIC\\%s' %g)

        os.chdir('D:\\MM-PIC\\%s' %g)

        homedir=os.getcwd()

        print homedir

        x=0

        for j in idic[age]:

            print j

            urllib.urlretrieve(j,'D:\\MM-PIC\\%s\\%s.jpg' %(g,x))

            x+=1

        

        print homedir

        

            

        mm_name=str(g)+'.txt'

        print g

        Creatnewtxt(mm_name,age,'D:\\MM-PIC\\%s' %g)   

       

        print '這張頁面圖片張數:%s,' %x

        y+=x

            

    return y

---------------------------------------------------------------------------

剛學這個遇到不少問題,遇到不少前輩 指點,完成了個人第一個爬蟲。再次感謝!

程序還有不少在功能上,結構上,命名的地方須要改進,好比抓美女的三維數據,聯繫方式,QQ(QQ這個我試了一下,沒辦到,網頁QQ有的在圖片上,還有一抓一大片數字,找不到具體的QQ等)

大概花了3天才解決問題,基本完成的,完成以後的欣喜,那種感受,真爽!

下面去繼續學習爬蟲,在麥子網上系統的學習python,若是寫了好東西,再跟你們分享。


錯誤筆記:

第一個就是/xo1/xo0/之類的數據,ASCII報錯,耗掉我大量的 時間,解決辦法是,在使用參數前,print一下就行了。

第二個調用其餘py裏面的 函數,沒在開頭加 #-*- coding: UTF-8 -*-   會顯示」SyntaxError: Non-ASCII character '\xb5' in file C:\Python27\myfile.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details「

第三個:淘寶網會禁止訪問,跳到淘寶登入頁面,我還一直覺得是我程序有問題,把內容打印出來才發現。

第四個:decode()在os模塊下很差用。

第五個:經常會被縮進,和中文’)搞的蛋碎,不過IDLE報錯位置仍是很準的,不是前面一個字符就是後面一個字符錯了。


哦,忘了這個xingbuxing.py(勿噴)的代碼:

#-*- coding: UTF-8 -*-  


import os

def Creatnewtxt(txtname,text_cont,Dir):

    t=os.getcwd()

    print'old=%s' %t

    os.chdir(Dir)

    t=os.getcwd()

    print'now=%s' %t

    f=file(txtname,'w')

    f.write(text_cont) 

    f.close()


    f=file(txtname)

    cont=f.readline()

    print cont

    f.close()


if __name__ == '__main__':

    d='d:\\'

    Creatnewtxt('fuhan.txt','you are the best','d:\\')


還有正則測試器RegexTester.exe比較好用。!

若是有美女想要了解我,能夠夾我口口:四六二九二九880,ye_mao


還有,原本想用cmd的ping命令來ping出那個page自大頁的,可是先生訪問不到主機,才發現,後面都變成相同的了。

不明白爲何。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息