python 批量获取色影无忌 获奖图片
色影无忌上的图片很多都可以直接拿来做壁纸的,而且发布面不会太广,基本不会和市面上大部分的壁纸或者图片素材重复。 关键还没有水印。 这么良心的图片服务商哪里找呀~~
不多说,直接来代码:
下载后在content文件夹下会自动抓取所有图片。 (色影无忌的服务器没有做任何的屏蔽处理,所以脚本不能跑那么快,可以适当调用sleep函数,不要让服务器压力那么大)
已经下载好的图片:
github: https://github.com/Rockyzsu/fetchXitek (欢迎前来star)
不多说,直接来代码:
#-*-coding=utf-8-*-
__author__ = 'rocky chen'
from bs4 import BeautifulSoup
import urllib2,sys,StringIO,gzip,time,random,re,urllib,os
reload(sys)
sys.setdefaultencoding('utf-8')
class Xitek():
def __init__(self):
self.url="http://photo.xitek.com/"
user_agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
self.headers={"User-Agent":user_agent}
self.last_page=self.__get_last_page()
def __get_last_page(self):
html=self.__getContentAuto(self.url)
bs=BeautifulSoup(html,"html.parser")
page=bs.find_all('a',class_="blast")
last_page=page[0]['href'].split('/')[-1]
return int(last_page)
def __getContentAuto(self,url):
req=urllib2.Request(url,headers=self.headers)
resp=urllib2.urlopen(req)
#time.sleep(2*random.random())
content=resp.read()
info=resp.info().get("Content-Encoding")
if info==None:
return content
else:
t=StringIO.StringIO(content)
gziper=gzip.GzipFile(fileobj=t)
html = gziper.read()
return html
#def __getFileName(self,stream):
def __download(self,url):
p=re.compile(r'href="(/photoid/\d+)"')
#html=self.__getContentNoZip(url)
html=self.__getContentAuto(url)
content = p.findall(html)
for i in content:
print i
photoid=self.__getContentAuto(self.url+i)
bs=BeautifulSoup(photoid,"html.parser")
final_link=bs.find('img',class_="mimg")['src']
print final_link
#pic_stream=self.__getContentAuto(final_link)
title=bs.title.string.strip()
filename = re.sub('[\/:*?"<>|]', '-', title)
filename=filename+'.jpg'
urllib.urlretrieve(final_link,filename)
#f=open(filename,'w')
#f.write(pic_stream)
#f.close()
#print html
#bs=BeautifulSoup(html,"html.parser")
#content=bs.find_all(p)
#for i in content:
# print i
'''
print bs.title
element_link=bs.find_all('div',class_="element")
print len(element_link)
k=1
for href in element_link:
#print type(href)
#print href.tag
'''
'''
if href.children[0]:
print href.children[0]
'''
'''
t=0
for i in href.children:
#if i.a:
if t==0:
#print k
if i['href']
print link
if p.findall(link):
full_path=self.url[0:len(self.url)-1]+link
sub_html=self.__getContent(full_path)
bs=BeautifulSoup(sub_html,"html.parser")
final_link=bs.find('img',class_="mimg")['src']
#time.sleep(2*random.random())
print final_link
#k=k+1
#print type(i)
#print i.tag
#if hasattr(i,"href"):
#print i['href']
#print i.tag
t=t+1
#print "*"
'''
'''
if href:
if href.children:
print href.children[0]
'''
#print "one element link"
def getPhoto(self):
start=0
#use style/0
photo_url="http://photo.xitek.com/style/0/p/"
for i in range(start,self.last_page+1):
url=photo_url+str(i)
print url
#time.sleep(1)
self.__download(url)
'''
url="http://photo.xitek.com/style/0/p/10"
self.__download(url)
'''
#url="http://photo.xitek.com/style/0/p/0"
#html=self.__getContent(url)
#url="http://photo.xitek.com/"
#html=self.__getContentNoZip(url)
#print html
#'''
def main():
sub_folder = os.path.join(os.getcwd(), "content")
if not os.path.exists(sub_folder):
os.mkdir(sub_folder)
os.chdir(sub_folder)
obj=Xitek()
obj.getPhoto()
if __name__=="__main__":
main()
下载后在content文件夹下会自动抓取所有图片。 (色影无忌的服务器没有做任何的屏蔽处理,所以脚本不能跑那么快,可以适当调用sleep函数,不要让服务器压力那么大)
已经下载好的图片:
github: https://github.com/Rockyzsu/fetchXitek (欢迎前来star)
6 个评论
太多代码注释了,可以删除
李魔佛 回复 bluescorpio
是的,因为当时遇到一个问题,某些页面居然会用zip压缩,有些页面却没有。毫无规律,当时爬虫因此而中断,不得不写了几个函数来测试。 后来发现有部分是zip压缩内容,所以才合并到一个通用文件。
为什么我运行的时候下载了四五张图片就卡住不动了?
李魔佛 回复 happily655
可以把提示的错误信息贴上来吗?
happily655 回复 李魔佛
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/apple/PycharmProjects/zngirls_spider/fuzhiseyingwuji.py
http://photo.xitek.com/style/0/p/0
/photoid/724433
http://image.xitek.com/photo/201507/4188/418822/418822_1437817141_66756700.JPG
/photoid/656220
http://image.xitek.com/photo/201310/15852/1585285/1585285_1380991292_07986800.jpg
/photoid/561120
没有错误提示……就是正常运行,也看到下载的图片了,文件夹里有了图片,但是经常运行了一会下载了几张图片之后就不动了,log 就卡在那里也不动,也不下载图片。是不是因为我的网络问题导致卡死了?
因为我网络早上比较好,所以早上爬了下一直运行了很长时间,下载了几十张照片才卡主。我写的其他几个爬虫也是这情况……
http://photo.xitek.com/style/0/p/0
/photoid/724433
http://image.xitek.com/photo/201507/4188/418822/418822_1437817141_66756700.JPG
/photoid/656220
http://image.xitek.com/photo/201310/15852/1585285/1585285_1380991292_07986800.jpg
/photoid/561120
没有错误提示……就是正常运行,也看到下载的图片了,文件夹里有了图片,但是经常运行了一会下载了几张图片之后就不动了,log 就卡在那里也不动,也不下载图片。是不是因为我的网络问题导致卡死了?
因为我网络早上比较好,所以早上爬了下一直运行了很长时间,下载了几十张照片才卡主。我写的其他几个爬虫也是这情况……
李魔佛 回复 happily655
建议你sync一下我的github的代码,我今天试了下,没遇到你的问题。如果不行你把我的sleep注释去掉,每爬取一阵子就停顿一个时间。