标题: [原创教程] python抓取美女图.py [打印本页]
作者: codegay 时间: 2016-5-5 08:13 标题: python抓取美女图.py
本帖最后由 codegay 于 2016-5-29 15:24 编辑
python抓取美女图.py
由于是只用标准库,装了python3运行本代码就能下载到多多的美女图...
写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完。
测试发现速度一般,200K左右的下载速度,也没有很好的错误处理。不过还是基本上能用。以后继续改进。
写出抓取东西的程序,比写其它程序要开心很多。^_^,大家也来试试写一个?- """
- python抓取性感尤物美女图.py
- 2016年5月4日 00:51:00 codegay
-
- 参考资料: Python3学习笔记(urllib模块的使用)
- http://www.cnblogs.com/Lands-ljk/p/5447127.html
-
- 以下例子是python2的代码,并且用到lxml,requests 库
- 我用python3标准库和正则写一个下载全站美女图的程序
-
- 使用python来批量抓取网站图片
- http://www.cnblogs.com/TeyGao/p/5225940.html
- """
- print("程序运行中...")
- import re
- from urllib import request
- import os
- from pprint import pprint
- from time import sleep
-
- rooturl="http://www.xgyw.cc/"
-
- def getclass():
- rec=re.compile('''align=center\>\<a href="(/\w+/)\"\>(.+)\</a\>''')
- try:
- txt=request.urlopen(rooturl).read().decode("gbk")
- fl=rec.findall(txt)
- except:
- print("错误")
- sleep(1)
-
- print("分类:")
- pprint(fl)
- return fl
- fenlei=getclass()#下载所有分类下的图片
- #fenlei=[getclass()[-1]]#只下载推女郎
-
- def getpagelist():
- plist=[]
- for f,n in fenlei:
- rec=re.compile('''({}page_\d+?\.html)'''.format(f))
- try:
- txt=request.urlopen(rooturl+f).read().decode("gbk")
- t=sorted(set(rec.findall(txt)+[f]))
- plist+=t
- except:
- print("错误",e)
- sleep(1)
-
- #print("page_list:")
- #pprint(plist)
- return plist
- pagelist=getpagelist()
-
- def getalbumlist():
- albumlist=[]
- for r in pagelist:
- print(rooturl+r)
- try:
- txt=request.urlopen(rooturl+r).read().decode("gbk")
- for x in re.findall(r'''href=(/(\w+)/(\2)\d+.html)''',txt):
- albumlist+=[x[0]]
- except:
- print("getalbumlist错误")
- sleep(1)
- return albumlist
- albumlist=getalbumlist()
-
- def getfphoto():
-
- for r in albumlist:
- try:
- txt=request.urlopen(rooturl+r).read().decode("gbk")
- result=re.findall(r'''(/(\w+)/(\2)\d+_?\d*.html)''',txt)
- print(t)
- except:
- sleep(1)
-
- pass
- for x in result:
- try:
- html=request.urlopen(rooturl+x[0]).read().decode("gbk")
- jpgresult=re.findall('''src=\"(/uploadfile.*?\d+/\w+\.jpg)\"''',html)
- print(jpgresult)
- except:
- sleep(1)
- for h in jpgresult:
- try:
- request.urlretrieve(rooturl+h,os.path.basename(h))
- except:
- print(3)
- sleep(1)
-
- 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,查了挺久,乱凑出来…- import re
- from urllib import request
- import os
- from pprint import pprint
- from time import sleep
-
- url_imgs = 'http://img.xgyw.cc/'
- url_root = 'http://www.xgyw.cc'
- url_find = url_root + '/neiyiyouwu/neiyiyouwu2035.html'
- path_save = '.'
-
- try:
- txt=request.urlopen(url_find).read().decode("gbk")
- rs_page=re.findall(r'''(/(\w+)/(\2)\d+_?\d*.html)''',txt)
- print('\n### rs_page::\n', rs_page)
- except:
- sleep(1)
- pass
-
- nPage = 0
- for x in rs_page:
- nPage += 1
- url_page = url_root + x[0]
- try:
- html=request.urlopen(url_page).read().decode("gbk")
- rs_img=re.findall('''src=\"(/uploadfile.*?\d+/\w+\.jpg)\"''',html)
- print('\n### Page:' + str(nPage) + '/' + str(len(rs_page)))
- print('\t### ' + url_page)
- except:
- sleep(1)
-
- nImgs = 0
- for h in rs_img:
-
- nImgs += 1
-
- fn = os.path.basename(h)
- dp = os.path.basename(url_find)
- #dp = url_find[url_find.rfind('/')+1:]
- dp = path_save + '/' + dp[:dp.rfind('.')]
- if (os.path.exists(dp) == False) : os.makedirs(dp) #建立文件夹
-
- ff = (dp + '/' + fn).replace('/', '\\')
- url_img = url_imgs + h
-
- print('\n### Page:' + str(nPage) + '/' + str(len(rs_page)), '\tImgs:' + str(nImgs) + '/' + str(len(rs_img)))
- print('\t### ' + url_page)
- print('\t### ', url_img)
- print('\t### ->', ff)
-
- try:
- if (os.path.exists(ff) == False):
- print('\t### Download ...')
- request.urlretrieve(url_img, ff)
- print('\t\t### [OK]')
- else:
- print('\t### [EXIST]')
-
- except:
- print('\t\t### Error:0x3')
- sleep(1)
-
- print('\n### Done.')
复制代码
作者: codegay 时间: 2016-5-31 00:08
不错,进步很比我的都快。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |