查看: 4459|回复: 1
打印 上一主题 下一主题

[其他] [python爬虫] 给你代码带你爬取妹子图

[复制链接]
匿名
跳转到指定楼层
楼主
匿名  发表于 2018-8-22 15:03:32 |倒序浏览
导包

import re,os,time
from piaot import *

  1. 获得网页的页数和连接
  2. def mnshoye():

  3.     # 主页
  4.     url='http://www.mzitu.com/'

  5.     # 自定义包
  6.     req=yc(url)
  7.     html=req.decode('utf-8')
  8.     # print(html)
  9.     # 正则
  10.     xz = r'<a title=".*?" href="(.*?)">(.*?)</a>'
  11.     ll = re.compile(xz)
  12.     html_1=ll.findall(html)
  13.     # print(html)
  14.     return html_1
复制代码
主函数
  1. def zhu():
  2.     print('欢迎来到妹子图库!(^-^)')
  3.     # 调用函数mnshoye
  4.     x = mnshoye()

  5.     # 循环出每一列的名称

  6.     print('请输入需要爬的分类(编号):')

  7.     p=0
  8.     for i in x[1:6]:
  9.         p+=1
  10.         print(p,':',i[1],'  ',end='')


  11.     # 输入分类名
  12.     name=int(input('-->>'))

  13.     print('请问爬取页?')

  14.     shu=int(input('-->>'))

  15.     if name == 1:
  16.         return mz_li(x[1][0],shu,x[1][1])
  17.     elif name == 2:
  18.         return mz_li(x[2][0],shu,x[2][1])
  19.     elif name == 3:
  20.         return mz_li(x[3][0],shu,x[3][1])
  21.     elif name == 4:
  22.         return mz_li(x[4][0],shu,x[4][1])
  23.     elif name == 5:
  24.         return mz_li(x[5][0],shu,x[5][1])
  25.     else:
  26.         print('抱歉!,你输入的值我们查询不到请重新输入')
  27.         zhu()
复制代码
创建文件
  1. def mz_li(url,jshu=1,name=None):

  2.     for i in range(jshu):

  3.         url=url+'page/{}/'.format(i+1)

  4.         # 请求其中的分类内容
  5.         nr=yc(url)
  6.         html=nr.decode('utf-8')

  7.         # 正则过滤
  8.         zc = r'<li><a href="(.*?)".*alt=\'(.*?)\'.*</span></li>'
  9.         ss = re.compile(zc)
  10.         html = ss.findall(html)

  11.         # 判断是否是我们希望的页面
  12.         if html == [''] or []:

  13.             # 如果不是重新调用
  14.             mz_li(url,jshu,name)

  15.         else:

  16.             # 循环
  17.             for j in html:
  18.                 # 判断是否在文件夹名称
  19.                 b = 'C:/Users/黑神/Desktop/pc_zy/妹子图/'+str(name) +'/'+ j[1]

  20.                 # 判断当前路径是否存在,没有则创建new文件夹
  21.                 if not os.path.exists(b):
  22.                     print('正在创建文件夹:路径C:/Users/黑神/Desktop/pc_zy/妹子图/'+j[1])
  23.                     # 执行存储
  24.                     os.makedirs(b)

  25.                     print('创建成功....')

  26.                     # 文件夹创建完毕后调用爬取图片函数,将url传过去
  27.                     pq_tupian_yeshu(j[0],name)
  28.                     # print('爬取完成!')

  29.     return '爬取完毕!'
复制代码
获得网页数量
  1. def pq_tupian_yeshu(url,name):
  2.     print(url)
  3.     print('开始爬取图片')

  4.     # 调用自定义包
  5.     req=yc(url)

  6.     html=req.decode('utf-8')

  7.     # 正则
  8.     x = r'<span>(\d*?)</span>'
  9.     ss=re.compile(x)
  10.     html=ss.findall(html)

  11.     # 判断是否是我们希望的页面
  12.     if html == ['']:

  13.         # 如果不是重新调用
  14.         pq_tupian_yeshu(url,name=name)

  15.     else:
  16.         a=[]
  17.         # 因为获取的值是字符串类型需要转换成int整型
  18.         for i in html:
  19.             a.append(int(i))

  20.         # 循环页数,将最大的页数当也结束值
  21.         for i in range(1,max(a)+1):

  22.             if i == 1:
  23.             # 拼接地址循环页数
  24.                 url_tp=url
  25.             else:
  26.                 url_tp = url + str(i)

  27.             pq_tp(url_tp,name)
复制代码
爬取图片
  1. def pq_tp(url,name):

  2.     print(url)
  3.     html=yc(url)
  4.     html=html.decode('utf-8')
  5.     # 正则
  6.     x = r'<img src="(.*?)" alt="(.*?)" /></a></p>'
  7.     ss = re.compile(x)
  8.     html = ss.findall(html)

  9.     # 判断是否是我们希望的页面
  10.     if html == []:
  11.         pq_tp(url)
  12.     else:
  13.         print(html[0][0])
  14.         # 反爬虫,添加表头和Referer
  15.         tox ={'User-Agent':pa(),'Referer':url}

  16.         print('开始下载中......')
  17.         # 自定义包
  18.         data=yc(html[0][0],tox=tox)

  19.         print('下载完毕!')
  20.         # 保存的地址
  21.         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'
  22.         print(dz)

  23.         # 保存到文件
  24.         with open(dz,'wb') as f:
  25.             f.write(data)
复制代码
if name==’main‘:
    zhu()

//鸣谢:Black_God1




分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

5472

主题

6

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
76544
精华
23

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2018-10-18 09:20:27 |只看该作者
做纳金论坛版主 写教程 赚现金 加管理员QQ943169942
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-14 12:26 , Processed in 0.093727 second(s), 33 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部