導包
import re,os,time
from piaot import *
from multiprocessing import Pool
獲得網頁頁數數量
def mnshoye():
# 主頁
url='http://www.mzitu.com/'
# 自定義包
req=yc(url)
html=req.decode('utf-8')
# print(html)
# 正則
xz = r'<a title=".*?" href="(.*?)">(.*?)</a>'
ll = re.compile(xz)
html_1=ll.findall(html)
# print(html)
return html_1
主函數
def zhu():
print('歡迎來到妹子圖庫!(^-^)')
# 調用函數mnshoye
x = mnshoye()
# 循環出每一列的名稱
print('請輸入需要爬的分類(編號):')
p=0
for i in x[1:6]:
p+=1
print(p,':',i[1],' ',end='')
# 輸入分類名
name=int(input('-->>'))
print('請問爬取頁?')
shu=int(input('-->>'))
if name == 1:
mz_li(x[1][0],shu,x[1][1])
elif name == 2:
mz_li(x[2][0],shu,x[2][1])
elif name == 3:
mz_li(x[3][0],shu,x[3][1])
elif name == 4:
mz_li(x[4][0],shu,x[4][1])
elif name == 5:
mz_li(x[5][0],shu,x[5][1])
else:
print('抱歉!,你輸入的值我們查詢不到請重新輸入')
zhu()
創建文件
def mz_li(url,jshu=1,name=None):
for i in range(jshu):
url=url+'page/{}/'.format(i+1)
# 請求其中的分類內容
nr=yc(url)
html=nr.decode('utf-8')
# 正則過濾
zc = r'<li><a href="(.*?)".*alt=\'(.*?)\'.*</span></li>'
ss = re.compile(zc)
html = ss.findall(html)
# 判斷是否是我們希望的頁面
if html == [''] or []:
# 如果不是重新調用
mz_li(url,jshu,name)
else:
# 循環
for j in html:
# 判斷是否在文件夾名稱
b = 'C:/Users/黑神/Desktop/pc_zy/妹子圖/'+str(name) +'/'+ j[1]
# 判斷當前路徑是否存在,沒有則創建new文件夾
if not os.path.exists(b):
print('正在創建文件夾:路徑C:/Users/黑神/Desktop/pc_zy/妹子圖/'+j[1])
# 執行存儲
os.makedirs(b)
print('創建成功....')
# 文件夾創建完畢後調用爬取圖片函數,將url傳過去
pq_tupian_yeshu(j[0],name)
# print('爬取完成!')
return '爬取完畢!'
獲得網頁數量
def pq_tupian_yeshu(url,name):
print(url)
print('開始爬取圖片')
# 調用自定義包
req=yc(url)
html=req.decode('utf-8')
# 正則
x = r'<span>(\d*?)</span>'
ss=re.compile(x)
html=ss.findall(html)
# 判斷是否是我們希望的頁面
if html == ['']:
# 如果不是重新調用
pq_tupian_yeshu(url,name=name)
else:
a=[]
# 因爲獲取的值是字符串類型需要轉換成int整型
for i in html:
a.append(int(i))
# 進程池
p=Pool(3)
# 循環頁數,將最大的頁數當也結束值
for i in range(1,max(a)+1):
if i == 1:
# 拼接地址循環頁數
url_tp=url
else:
url_tp = url +'/'+ str(i)
# print(url_tp)
p.apply_async(pq_tp,(url_tp,name))
# pq_tp(url_tp,name)
# # 關閉進程池,停止接受其它進程
p.close()
# # 阻塞進程
p.join()
爬取圖片
def pq_tp(url,name):
print(url)
html=yc(url)
html=html.decode('utf-8')
# 正則
x = r'<img src="(.*?)" alt="(.*?)" /></a></p>'
ss = re.compile(x)
html = ss.findall(html)
# 判斷是否是我們希望的頁面
if html == []:
pq_tp(url,name)
else:
print(html[0][0])
# 反爬蟲,添加表頭和Referer
tox ={'User-Agent':pa(),'Referer':url}
print('開始下載中......')
# 自定義包
data=yc(html[0][0],tox=tox)
print('下載完畢!')
# 保存的地址
dz='C:/Users/黑神/Desktop/pc_zy/妹子圖/'+str(name)+'/'+html[0][1]+'/'+str(time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())))+'.jpg'
print(dz)
# 保存到文件
with open(dz,'wb') as f:
f.write(data)
if name==’main‘:
zhu()