爬蟲福利二 之 妹子圖網MM批量下載
爬蟲福利一:27報網MM批量下載 點選
看了本文,相信大家對爬蟲一定會產生強烈的興趣,激勵自己去學習爬蟲,在這裡提前祝:大家學有所成!
目標網站:妹子圖網
環境:Python3.x
相關第三方模組:requests、beautifulsoup4
Re:各位在測試時只需要將程式碼裡的變數 path 指定為你當前系統要儲存的路徑,使用 python xxx.py 或IDE執行即可。
完整原始碼如下:
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import os
all_url = 'https://www.mzitu.com'
# http請求頭
Hostreferer = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
'Referer': 'http://www.mzitu.com'
}
# 此請求頭Referer破解盜圖連結
Picreferer = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
'Referer': 'http://i.meizitu.net'
}
# 對mzitu主頁all_url發起請求,將返回的HTML資料儲存,便於解析
start_html = requests.get(all_url, headers=Hostreferer)
# Linux儲存地址
# path = '/home/Nick/Desktop/mzitu/'
# Windows儲存地址
path = 'E:/mzitu/'
# 獲取最大頁數
soup = BeautifulSoup(start_html.text, "html.parser")
page = soup.find_all('a', class_='page-numbers')
max_page = page[-2].text
# same_url = 'http://www.mzitu.com/page/' # 主頁預設最新圖片
# 獲取每一類MM的網址
same_url = 'https://www.mzitu.com/mm/page/' # 也可以指定《qingchun MM系列》
for n in range(1, int(max_page) + 1):
# 拼接當前類MM的所有url
ul = same_url + str(n)
# 分別對當前類每一頁第一層url發起請求
start_html = requests.get(ul, headers=Hostreferer)
# 提取所有MM的標題
soup = BeautifulSoup(start_html.text, "html.parser")
all_a = soup.find('div', class_='postlist').find_all('a', target='_blank')
# 遍歷所有MM的標題
for a in all_a:
# 提取標題文字,作為資料夾名稱
title = a.get_text()
if(title != ''):
print("準備扒取:" + title)
# windows不能建立帶?的目錄,新增判斷邏輯
if(os.path.exists(path + title.strip().replace('?', ''))):
# print('目錄已存在')
flag = 1
else:
os.makedirs(path + title.strip().replace('?', ''))
flag = 0
# 切換到上一步建立的目錄
os.chdir(path + title.strip().replace('?', ''))
# 提取第一層每一個MM的url,併發起請求
href = a['href']
html = requests.get(href, headers=Hostreferer)
mess = BeautifulSoup(html.text, "html.parser")
# 獲取第二層最大頁數
pic_max = mess.find_all('span')
pic_max = pic_max[9].text
if(flag == 1 and len(os.listdir(path + title.strip().replace('?', ''))) >= int(pic_max)):
print('已經儲存完畢,跳過')
continue
# 遍歷第二層每張圖片的url
for num in range(1, int(pic_max) + 1):
# 拼接每張圖片的url
pic = href + '/' + str(num)
# 發起請求
html = requests.get(pic, headers=Hostreferer)
mess = BeautifulSoup(html.text, "html.parser")
pic_url = mess.find('img', alt=title)
print(pic_url['src'])
html = requests.get(pic_url['src'], headers=Picreferer)
# 提取圖片名字
file_name = pic_url['src'].split(r'/')[-1]
# 儲存圖片
f = open(file_name, 'wb')
f.write(html.content)
f.close()
print('完成')
print('第', n, '頁完成')
扒圖步驟分析:(送給有興趣的朋友)
1、獲取網頁原始碼
開啟mzitu網址,用瀏覽器的F12可以看到網頁的請求過程及原始碼
該步驟程式碼如下:
#coding=utf-8
import requests
url = 'http://www.mzitu.com'
#設定headers,網站會根據這個判斷你的瀏覽器及作業系統,很多網站沒有此資訊將拒絕你訪問
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}
#用get方法開啟url併傳送headers
html = requests.get(url,headers = header)
#列印結果 .text是列印出文字資訊即原始碼
print(html.text)
返回的響應,如果沒問題的話結果和下面類似,這些就是網頁的原始碼了。
<html>
<body>
......
$("#index_banner_load").find("div").appendTo("#index_banner");
$("#index_banner").css("height", 90);
$("#index_banner_load").remove();
});
</script>
</body>
</html>
2、提取所需資訊
- 將獲取的原始碼轉換為BeautifulSoup物件
- 使用find搜尋需要的資料,儲存到容器中
該步驟程式碼如下:
#coding=utf-8
import requests
from bs4 import BeautifulSoup
url = 'http://www.mzitu.com'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}
html = requests.get(url,headers = header)
#使用自帶的html.parser解析,速度慢但通用
soup = BeautifulSoup(html.text,'html.parser')
#實際上是第一個class = 'postlist'的div裡的所有a 標籤是我們要找的資訊
all_a = soup.find('div',class_='postlist').find_all('a',target='_blank')
for a in all_a:
title = a.get_text() #提取文字
print(title)
如下就找到了當頁所有套圖的標題:
注意:BeautifulSoup()返回的型別是<class 'bs4.BeautifulSoup'>
find()返回的型別是<class 'bs4.element.Tag'>
find_all()返回的型別是<class 'bs4.element.ResultSet'>
<class 'bs4.element.ResultSet'>不能再進項find/find_all操作
3、進入第二層頁面,進行下載操作
點進一個套圖之後,發現他是每個頁面顯示一個圖片,這時我們需要知道他的總頁數,比如:http://www.mzitu.com/26685是某個套圖的第一頁,後面的頁數都是再後面跟/和數字http://www.mzitu.com/26685/2 (第二頁),那麼很簡單了,我們只需要找到他一共多少頁,然後用迴圈組成頁數就OK了。
該步驟程式碼如下:
#coding=utf-8
import requests
from bs4 import BeautifulSoup
url = 'http://www.mzitu.com/26685'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}
html = requests.get(url,headers = header)
soup = BeautifulSoup(html.text,'html.parser')
#最大頁數在span標籤中的第10個
pic_max = soup.find_all('span')[10].text
print(pic_max)
#輸出每個圖片頁面的地址
for i in range(1,int(pic_max) + 1):
href = url+'/'+str(i)
print(href)
那麼我們接下來就是進行尋找圖片地址,儲存下來;右鍵MM圖片,點選檢查可以發現如圖:
<img src="https://i5.meizitu.net/2019/07/01b56.jpg" alt="xxxxxxxxxxxxxxxxxxxxxxxxx" width="728" height="485">
如圖所示,上面就是我們MM圖片的具體地址了,儲存它即可。
該步驟程式碼如下:
#coding=utf-8
import requests
from bs4 import BeautifulSoup
url = 'http://www.mzitu.com/26685'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}
html = requests.get(url,headers = header)
soup = BeautifulSoup(html.text,'html.parser')
#最大頁數在span標籤中的第10個
pic_max = soup.find_all('span')[10].text
#找標題
title = soup.find('h2',class_='main-title').text
#輸出每個圖片頁面的地址
for i in range(1,int(pic_max) + 1):
href = url+'/'+str(i)
html = requests.get(href,headers = header)
mess = BeautifulSoup(html.text,"html.parser")
#圖片地址在img標籤alt屬性和標題一樣的地方
pic_url = mess.find('img',alt = title)
html = requests.get(pic_url['src'],headers = header)
#獲取圖片的名字方便命名
file_name = pic_url['src'].split(r'/')[-1]
#圖片不是文字檔案,以二進位制格式寫入,所以是html.content
f = open(file_name,'wb')
f.write(html.content)
f.close()
到此分析結束,完整程式碼見文章開頭......
相關文章
- 爬蟲福利----妹子圖網MM批量下載爬蟲
- 第二彈!python爬蟲批量下載高清大圖Python爬蟲
- Python爬蟲之煎蛋網圖片下載Python爬蟲
- Golang福利爬蟲Golang爬蟲
- Java爬蟲之批量下載LibreStock圖片(可輸入關鍵詞查詢下載)Java爬蟲REST
- 爬蟲福利:教你爬wap站爬蟲
- python爬蟲:批量下載qq空間裡的照片(一)Python爬蟲
- Node.js爬取妹子圖-crawler爬蟲的使用Node.js爬蟲
- 爬蟲第二彈:千圖網電商淘寶模板圖片下載爬蟲
- Python爬蟲入門教程 2-100 妹子圖網站爬取Python爬蟲網站
- 分散式爬蟲的部署之Scrapyd批量部署分散式爬蟲
- Java爬蟲批量爬取圖片Java爬蟲
- 爬蟲 Scrapy框架 爬取圖蟲圖片並下載爬蟲框架
- python爬蟲之圖片下載APP1.0Python爬蟲APP
- 網路爬蟲大型教程(二)爬蟲
- 中小學教材下載爬蟲爬蟲
- python爬蟲之js逆向(二)Python爬蟲JS
- Python爬蟲學習(6): 爬取MM圖片Python爬蟲
- 爬蟲學習之基於Scrapy的網路爬蟲爬蟲
- 1號小爬蟲:普通的爬蟲,下載百度桌布爬蟲
- Python爬蟲全網搜尋並下載音樂Python爬蟲
- 如何用python爬蟲下載小說?Python爬蟲
- GB標準文件爬蟲下載程式爬蟲
- 反爬蟲之字型反爬蟲爬蟲
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- ReactPHP 爬蟲實戰:下載整個網站的圖片ReactPHP爬蟲網站
- 堆糖網爬蟲(根據關鍵字下載圖片)爬蟲
- 爬蟲技術(二)-客戶端爬蟲爬蟲客戶端
- 網路爬蟲之抓取郵箱爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 快上車,scrapy爬蟲飆車找福利(三)爬蟲
- 快上車,scrapy爬蟲飆車找福利(一)爬蟲
- 新手爬蟲,教你爬掘金(二)爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 網路爬蟲之關於爬蟲 http 代理的常見使用方式爬蟲HTTP
- Python爬蟲之網頁圖片Python爬蟲網頁
- Python初學者之網路爬蟲Python爬蟲
- Python爬蟲批次下載電影連結Python爬蟲