找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23640|回复: 9

[原创教程] python抓取美女图.py

[复制链接]
发表于 2016-5-5 08:13:56 | 显示全部楼层 |阅读模式
本帖最后由 codegay 于 2016-5-29 15:24 编辑

python抓取美女图.py

由于是只用标准库,装了python3运行本代码就能下载到多多的美女图...
写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完。
测试发现速度一般,200K左右的下载速度,也没有很好的错误处理。不过还是基本上能用。以后继续改进。

写出抓取东西的程序,比写其它程序要开心很多。^_^,大家也来试试写一个?
  1. """
  2. python抓取性感尤物美女图.py
  3. 2016年5月4日 00:51:00 codegay

  4. 参考资料: Python3学习笔记(urllib模块的使用)
  5. http://www.cnblogs.com/Lands-ljk/p/5447127.html

  6. 以下例子是python2的代码,并且用到lxml,requests 库
  7. 我用python3标准库和正则写一个下载全站美女图的程序

  8. 使用python来批量抓取网站图片
  9. http://www.cnblogs.com/TeyGao/p/5225940.html
  10. """
  11. print("程序运行中...")
  12. import re
  13. from urllib import request
  14. import os
  15. from pprint import pprint
  16. from time import sleep

  17. rooturl="http://www.xgyw.cc/"

  18. def getclass():
  19.     rec=re.compile('''align=center\>\<a href="(/\w+/)"\>(.+)\</a\>''')
  20.     try:
  21.         txt=request.urlopen(rooturl).read().decode("gbk")
  22.         fl=rec.findall(txt)
  23.     except:
  24.         print("错误")
  25.         sleep(1)
  26.         
  27.     print("分类:")
  28.     pprint(fl)
  29.     return fl
  30. fenlei=getclass()#下载所有分类下的图片
  31. #fenlei=[getclass()[-1]]#只下载推女郎

  32. def getpagelist():
  33.     plist=[]
  34.     for f,n in fenlei:
  35.         rec=re.compile('''({}page_\d+?\.html)'''.format(f))
  36.         try:
  37.             txt=request.urlopen(rooturl+f).read().decode("gbk")
  38.             t=sorted(set(rec.findall(txt)+[f]))
  39.             plist+=t
  40.         except:
  41.             print("错误",e)
  42.             sleep(1)
  43.             
  44.     #print("page_list:")
  45.     #pprint(plist)
  46.     return plist
  47. pagelist=getpagelist()

  48. def getalbumlist():
  49.     albumlist=[]
  50.     for r in pagelist:
  51.         print(rooturl+r)
  52.         try:
  53.             txt=request.urlopen(rooturl+r).read().decode("gbk")
  54.             for x in re.findall(r'''href=(/(\w+)/(\2)\d+.html)''',txt):
  55.                 albumlist+=[x[0]]
  56.         except:
  57.             print("getalbumlist错误")
  58.             sleep(1)
  59.     return albumlist
  60. albumlist=getalbumlist()

  61. def getfphoto():

  62.     for r in albumlist:
  63.         try:
  64.             txt=request.urlopen(rooturl+r).read().decode("gbk")
  65.             result=re.findall(r'''(/(\w+)/(\2)\d+_?\d*.html)''',txt)
  66.             print(t)
  67.         except:
  68.             sleep(1)
  69.             
  70.             pass
  71.         for x in result:
  72.             try:
  73.                 html=request.urlopen(rooturl+x[0]).read().decode("gbk")
  74.                 jpgresult=re.findall('''src="(/uploadfile.*?\d+/\w+\.jpg)"''',html)
  75.                 print(jpgresult)
  76.             except:
  77.                 sleep(1)
  78.             for h in jpgresult:
  79.                 try:
  80.                     request.urlretrieve(rooturl+h,os.path.basename(h))
  81.                 except:
  82.                     print(3)
  83.                     sleep(1)

  84. getfphoto()
复制代码

评分

参与人数 2技术 +2 收起 理由
yu2n + 1 1024
happy886rr + 1 1

查看全部评分

发表于 2016-5-5 11:40:26 | 显示全部楼层
回复 2# codegay
不错,这个py太实用了,代码很长啊。
 楼主| 发表于 2016-5-5 11:55:11 | 显示全部楼层
回复 3# happy886rr


技巧欠缺加上之前没有写过。
发表于 2016-5-12 00:34:26 | 显示全部楼层
老司机
 楼主| 发表于 2016-5-12 07:18:05 | 显示全部楼层
回复 5# broly


    带带我
发表于 2016-5-12 10:53:50 | 显示全部楼层
虽然没玩过py,但还是觉得第21行代码写的太精彩了,看了一遍又一遍
发表于 2016-5-29 15:00:18 | 显示全部楼层
第94行开头多了一个空格...

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

 楼主| 发表于 2016-5-29 15:25:52 | 显示全部楼层
改了。
丑陋的代码简直是不让能向人提起的黑历史。
发表于 2016-5-30 23:50:51 | 显示全部楼层
不会用Python,查了挺久,乱凑出来…
  1. import re
  2. from urllib import request
  3. import os
  4. from pprint import pprint
  5. from time import sleep

  6. url_imgs = 'http://img.xgyw.cc/'
  7. url_root = 'http://www.xgyw.cc'
  8. url_find = url_root + '/neiyiyouwu/neiyiyouwu2035.html'
  9. path_save = '.'

  10. try:
  11.         txt=request.urlopen(url_find).read().decode("gbk")
  12.         rs_page=re.findall(r'''(/(\w+)/(\2)\d+_?\d*.html)''',txt)
  13.         print('\n### rs_page::\n', rs_page)
  14. except:
  15.         sleep(1)
  16.         pass
  17.        
  18. nPage = 0
  19. for x in rs_page:
  20.         nPage += 1
  21.         url_page = url_root + x[0]
  22.         try:
  23.                 html=request.urlopen(url_page).read().decode("gbk")
  24.                 rs_img=re.findall('''src="(/uploadfile.*?\d+/\w+\.jpg)"''',html)
  25.                 print('\n### Page:' + str(nPage) + '/' + str(len(rs_page)))
  26.                 print('\t### ' + url_page)
  27.         except:
  28.                 sleep(1)
  29.                
  30.         nImgs = 0
  31.         for h in rs_img:
  32.        
  33.                 nImgs += 1
  34.                
  35.                 fn = os.path.basename(h)
  36.                 dp = os.path.basename(url_find)
  37.                 #dp = url_find[url_find.rfind('/')+1:]
  38.                 dp = path_save + '/' + dp[:dp.rfind('.')]
  39.                 if (os.path.exists(dp) == False) : os.makedirs(dp)        #建立文件夹
  40.                
  41.                 ff = (dp + '/' + fn).replace('/', '\\')
  42.                 url_img = url_imgs + h
  43.                
  44.                 print('\n### Page:' + str(nPage) + '/' + str(len(rs_page)), '\tImgs:' + str(nImgs) + '/' + str(len(rs_img)))
  45.                 print('\t### ' + url_page)
  46.                 print('\t###   ', url_img)
  47.                 print('\t### ->', ff)
  48.                
  49.                 try:
  50.                         if (os.path.exists(ff) == False):
  51.                                 print('\t### Download ...')
  52.                                 request.urlretrieve(url_img, ff)
  53.                                 print('\t\t### [OK]')
  54.                         else:
  55.                                 print('\t### [EXIST]')
  56.                        
  57.                 except:
  58.                         print('\t\t### Error:0x3')
  59.                         sleep(1)
  60.                
  61. print('\n### Done.')
复制代码

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

 楼主| 发表于 2016-5-31 00:08:51 | 显示全部楼层
不错,进步很比我的都快。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:49 , Processed in 0.018385 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表