學習編程語言是很枯燥的,尤爲是對一個編程零基礎的人來講,更爲枯燥!因此咱們要從枯燥的學習中找點樂趣和動力!好比,抓點小姐姐的圖片html
咱們的目標選擇惟一圖庫,url本身去找【人工呲牙笑】python
這個網站沒有反爬,特別好爬,打開主頁後,找到美女圖片分類編程
上面分類沒有這個分類,本身想辦法進入哦。。。緩存
而後往下拉,就會發現N多的圖集,咱們先去找找翻頁,記得先打開F12開發者工具,而後選擇翻頁,查看源代碼中位置!app
能夠看到這裏就是控制頁面翻頁的源代碼了,咱們直接拿到a標籤的href屬性,這個是最後一頁的地址,將屬性中的「789」切出來,就拿到了最大頁碼,而後循環拿到全部頁面的url,以下圖編程語言
這樣就拿到全部頁面的url了,而後咱們取圖集的url,一樣的方式,找到源碼中url的位置函數
img_urls = etree.HTML(requests.get(url_i).text).xpath('//div[@class="ABox"]/a/@href') #url_i 是頁面的url,也就是上個代碼截圖中那個列表,循環遍歷出來的
一行代碼就取到了全部a標籤下的圖集地址,一頁有24個圖集!這裏咱們用一個函數來獲取全部圖集內圖片地址並返回圖集名字和圖片地址工具
這樣,主要內容就寫完了,而後就是構建整個代碼,寫入本地,我還將以前作的進度條也加進去了,總體代碼和效果發出來看看!學習
import os import time import requests from lxml import etree def get_img_url(url): ''' :param url: 圖集url :return: 圖集名字和圖片地址所構成的字典 ''' img = {}#空字典,用於放圖片url和對應的編號 html = requests.get(url)#獲取頁面源碼 html.encoding = 'gb2312' data = etree.HTML(html.text)#解析 title = data.xpath('//div[@class="wrapper clearfix imgtitle"]/h1/text()')[0]#圖集名 page = data.xpath('//div[@class="wrapper clearfix imgtitle"]/h1/span/span[2]/text()')[0]#圖集圖片數 img['1'] = data.xpath('//a[@class="down-btn"]/@href')[0]#第一張的圖片地址 for i in range(2,int(page)+1): #其他的圖片地址 img_url = etree.HTML(requests.get(url.replace('.html','_%s.html'%str(i))).text).xpath('//a[@class="down-btn"]/@href')[0] img['%s'%str(i)] = img_url#寫入字典 return title,img def downloader(url,path,name,header={}): start = time.time()#開始時間 if os.path.exists(path): # 判斷路徑及文件夾是否存在,不存在即建立 pass else: os.mkdir(path) size = 0 if header is None: response = requests.get(url, stream=True)#stream屬性必須帶上 else: response = requests.get(url, stream=True,headers=header)#stream屬性必須帶上 chunk_size = 1024#每次下載的數據大小 content_size = int(response.headers['content-length'])#總大小 if response.status_code == 200: print('[文件大小]:%0.2f MB' % (content_size / chunk_size / 1024))#換算單位並print with open(path+'\\%s'%name, "ab") as file: for data in response.iter_content(chunk_size=chunk_size): file.write(data) file.flush()#清空緩存 size += len(data)#已下載文件大小 #\r指定行第一個字符開始,搭配end屬性完成覆蓋進度條 print('\r'+'[下載進度]:%s%.2f%%' % ('>'*int(size*50/ content_size),float(size / content_size * 100)),end='') end = time.time()#結束時間 print('\n'+"%s下載完成!用時%.2f秒"%(name,(end-start))) if __name__ == '__main__': url_list=[]#放入全部頁面url url = 'http://www.mmonly.cc/mmtp/' url_list.append(url)#先放入第一頁 html = requests.get(url) html.encoding = 'gb2312' page = etree.HTML(html.text).xpath('//a[text()="末頁"]/@href')[0].split('_')[-1].split('.')[0] for i in range(2,int(page)+1): url_list.append(url+'list_9_{}.html'.format(str(i)))#其他頁面url,注意第一頁和其餘頁不同 for url_i in url_list: img_urls = etree.HTML(requests.get(url_i).text).xpath('//div[@class="ABox"]/a/@href') for img_url in img_urls: title,imgs = get_img_url(img_url) for img in imgs.keys(): path = 'E:\\python\\mn\\%s' % title downloader(url= imgs[img],path=path,name='%s.jpg'%(title+img))
其實這裏我想說的是,整個網站很標題黨。。。徹底不符合標題的。網站