#coding:utf-8 #__author__='wang' import requests,os,urllib,urllib2 import shutil #shutil模块,属于文件操作的高级模块 from bs4 import BeautifulSoup #定义爬虫类 class SpiderImage(object): def __init__(self): self.base_url = 'http://www.ivsky.com' self.headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0", "HOST":'www.ivsky.com' } self.current_page_nember = 1 def get_page_code(self,url): ''' 定义获取HTML源码的属性 :param url: 部分路径 /tupian/index_1.html :return: 无返回值 ''' #拼接每一页的绝对路径 abs_url = self.base_url + url try: request = urllib2.Request(abs_url,headers=self.headers) response = urllib2.urlopen(request) except Exception,e: print '链接失败,原因:',e else: pass #获取源码数据成功,开始获取源码中的图片 html = response.read() self.get_images_by_html(html) def get_images_by_html(self,page_code): ''' 根据每一页的网页源码,获取网页中的图片 :param page_code: 当前页的HTML源码 :return: 无返回值 ''' print '正在下载第{}页图片...'.format(self.current_page_nember) #通过bs4对源码进行解析,将其解析成一个文档树对象 bs_soup = BeautifulSoup(page_code,'lxml') img_list = bs_soup.select('.il_img img') # 为了更方便的查看和管理图片内容,再次将每一页分分组问价夹信息单独的存放 在一个文件夹内 page_number = '%d-pageimages' % self.current_page_nember os.mkdir(page_number) os.chdir(page_number) for img in img_list: #取出每一张的src,alt属性 img_src = img.get('src') img_alt = img.get('alt') #img_alt的值将其作为文件夹的名称,将img_src的图片下载到该文件夹内部 if os.path.exists(img_alt): #如果文件夹存在,删除文件夹 #mdir.()只能删除空的文件夹,如果文件夹内部或者文件夹或者文件则 会删除失败 #os.rmdir(img_alt) shutil.rmtree(img_alt,ignore_errors=True) print '{}:文件夹重复'.format(img_alt.encode('utf-8')) os.mkdir(img_alt) os.chdir(img_alt) img_name = img_src.split('/')[-1] # 下载图片 urllib.urlretrieve(img_src, img_name) # 从当前返回上一级目录,再创建一个分组信息的文件夹 os.chdir(os.path.pardir) os.chdir(os.path.pardir) self.current_page_nember += 1 #获取下一页的URL self.get_next_url(bs_soup) def get_next_url(self,bs_soup): ''' 获取下一页的URL :param bs_soup:接收当前页面(get_images_by_html())解析的bs对象 :return:没有返回值 ''' next_page = bs_soup.select('.page-next') if len(next_page) == 0: print '已经是最后一页了' else: next_page = next_page[0] url = next_page.get('href') self.get_page_code(url) def start_spider(self): if os.path.exists(u'图片'): shutil.rmtree(u'图片', ignore_errors=True) os.mkdir(u'图片') os.chdir(u'图片') self.get_page_code('/tupian/index_1.html') if __name__=='__main__': img_spider = SpiderImage() img_spider.start_spider()
bs4爬取图片
最新推荐文章于 2024-08-15 16:03:16 发布