python 爬取妹子圖


作為一個python還沒入門的小白,搞懂這段代碼實在是很不容易,還要去學html的知識(#黑臉)

因此我加上了注釋,比較好讀懂點

#coding=utf-8
import time
import requests
from bs4 import BeautifulSoup
import os
import sys

if(os.name == 'nt'):
        print(u'你正在使用win平台')
else:
        print(u'你正在使用linux平台')

header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
#http請求頭
all_url = 'http://www.mzitu.com'
start_html = requests.get(all_url,headers = header)

#保存地址
path = 'D:/mzitu/'

#找尋最大頁數
soup = BeautifulSoup(start_html.text,"html.parser")    #定義為beautifulsoup類parser
page = soup.find_all('a',class_='page-numbers') #page為一個列表,找到標簽為a的,屬性class為‘page-numbers'的標簽
max_page = page[-2].text #觀察最大頁數在-2處,用.text取文本信息


same_url = 'http://www.mzitu.com/page/'
for n in range(1,int(max_page)+1):
    ul = same_url+str(n)
    start_html = requests.get(ul, headers=header)
    soup = BeautifulSoup(start_html.text,"html.parser")#標簽的尋找find是一對一對的然后用text取其中內容
    all_a = soup.find('div',class_='postlist').find_all('a',target='_blank')#在find  div的大類下找到所有標簽a且a標簽中target為blank的標簽(因為有多個a類標簽,需要把沒用的排除掉)
    for a in all_a:    #all_a一共找到兩個部分,第一個部分是空的,第二部分才能提取得到title
        title = a.text #提取文本內容就是在<>尖括號以外的信息
        if(title != ''):
            print("准備扒取:"+title)

            #win不能創建帶?的目錄  如果目錄中含有?將其替換為''
            if(os.path.exists(path+title.strip().replace('?',''))):#如果目錄存在(exist)返回1,flag = 1
                flag=1
            else:
                os.makedirs(path+title.strip().replace('?',''))
                flag=0
            os.chdir(path + title.strip().replace('?',''))#改變當前工作目錄到指定路徑
            href = a['href']#圖片地址
            html = requests.get(href,headers = header)
            mess = BeautifulSoup(html.text,"html.parser")
            pic_max = mess.find_all('span')
            pic_max = pic_max[10].text #最大頁數
            if(flag == 1 and len(os.listdir(path+title.strip().replace('?',''))) >= int(pic_max)):
                print('已經保存完畢,跳過')
                continue
            for num in range(1,int(pic_max)+1):
                time.sleep(1)#抓慢一點,上次爬的太快ip被封了
                pic = href+'/'+str(num)#圖片所在頁的地址
                html = requests.get(pic,headers = header)
                mess = BeautifulSoup(html.text,"html.parser")
                pic_url = mess.find('img',alt = title)#找到標簽為img
                html = requests.get(pic_url['src'],headers = header)#這里找到的才是真正圖片的地址
                file_name = pic_url['src'].split(r'/')[-1]#文件名為地址分割后的最后一個字符串
                f = open(file_name,'wb')
                f.write(html.content)#content是類函數,在這里就是地址html所表示的圖片
                f.close()
            print('完成')
    print('',n,'頁完成')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM