Board logo

标题: [原创教程] python抓取美女图.py [打印本页]

作者: codegay    时间: 2016-5-5 08:13     标题: python抓取美女图.py

本帖最后由 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()
复制代码

作者: happy886rr    时间: 2016-5-5 11:40

回复 2# codegay
不错,这个py太实用了,代码很长啊。
作者: codegay    时间: 2016-5-5 11:55

回复 3# happy886rr


技巧欠缺加上之前没有写过。
作者: broly    时间: 2016-5-12 00:34

老司机
作者: codegay    时间: 2016-5-12 07:18

回复 5# broly


    带带我
作者: zz100001    时间: 2016-5-12 10:53

虽然没玩过py,但还是觉得第21行代码写的太精彩了,看了一遍又一遍
作者: bailong360    时间: 2016-5-29 15:00

第94行开头多了一个空格...
作者: codegay    时间: 2016-5-29 15:25

改了。
丑陋的代码简直是不让能向人提起的黑历史。
作者: yu2n    时间: 2016-5-30 23:50

不会用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. nPage = 0
  18. for x in rs_page:
  19. nPage += 1
  20. url_page = url_root + x[0]
  21. try:
  22. html=request.urlopen(url_page).read().decode("gbk")
  23. rs_img=re.findall('''src=\"(/uploadfile.*?\d+/\w+\.jpg)\"''',html)
  24. print('\n### Page:' + str(nPage) + '/' + str(len(rs_page)))
  25. print('\t### ' + url_page)
  26. except:
  27. sleep(1)
  28. nImgs = 0
  29. for h in rs_img:
  30. nImgs += 1
  31. fn = os.path.basename(h)
  32. dp = os.path.basename(url_find)
  33. #dp = url_find[url_find.rfind('/')+1:]
  34. dp = path_save + '/' + dp[:dp.rfind('.')]
  35. if (os.path.exists(dp) == False) : os.makedirs(dp) #建立文件夹
  36. ff = (dp + '/' + fn).replace('/', '\\')
  37. url_img = url_imgs + h
  38. print('\n### Page:' + str(nPage) + '/' + str(len(rs_page)), '\tImgs:' + str(nImgs) + '/' + str(len(rs_img)))
  39. print('\t### ' + url_page)
  40. print('\t###   ', url_img)
  41. print('\t### ->', ff)
  42. try:
  43. if (os.path.exists(ff) == False):
  44. print('\t### Download ...')
  45. request.urlretrieve(url_img, ff)
  46. print('\t\t### [OK]')
  47. else:
  48. print('\t### [EXIST]')
  49. except:
  50. print('\t\t### Error:0x3')
  51. sleep(1)
  52. print('\n### Done.')
复制代码

作者: codegay    时间: 2016-5-31 00:08

不错,进步很比我的都快。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2