导包
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()