代码改变世界

抓取妹子图

2017-04-21 23:33  再给我吃口肉  阅读(875)  评论(0)    收藏  举报

import requests

from bs4 import BeautifulSoup

import os

 

class mzitu():

 

  def requst(self,url):#定义获取网页的函数

        headers={'user-agent':"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"}#模拟浏览器,以防反爬虫

        content=requests.get(url,headers=headers)#获取网页内容

        return content

 

    def all_url(self,url):#定义获取主网页的函数

        html=self.requst(url)#获取主网页的全部内容

        all_a=BeautifulSoup(html.text,'lxml').find('div',class_='all').find_all('a')#通过beautifulsoup来解析网页。找到主页面所有图片的内容

        print(len(all_a))#打印一共有多少个图片

        for a in all_a:#遍历所有的图片链接

            title=a.get_text()#将图片属性a里的文字内容赋值给title

            print(u'开始保存:',title)

            path=str(title).replace("?",'_')#title里的?替换为空

            self.mkdir(path)按路径将片存储

            href=a['href']#得到每个图片的内容链接

            self.html(href)

    def html(self,href):#定义获得每套图片每页的链接的函数

        html=self.requst(href)#获取图片的网页内容

        #因为一套图片拥有多页图片,每页都会有一个图片。所以要分析每套图片的每页图片链接

max_span=BeautifulSoup(html.text,'lxml').find('div',class_='pagenavi').find_all('span')[-2].get_text()#解析到获取每套图片所有的页数

        for page in range(1,int(max_span)+1):#遍历页数

            page_url=href+'/'+str(page)#得到每页图片的链接,就是每套图片的链接加上歌页数

            self.img(page_url)

    def img(self,page_url):#得到每页图片的详细信息

        img_html=self.requst(page_url)#获取每个页面的所有信息

        img_url=BeautifulSoup(img_html.text,'lxml').find('div',class_='main-image').find('img')['src']#解析页面的的内容

        self.save(img_url)#保存图片

    def save(self,img_url):#定义保存图片的函数

        name=img_url[-9:-4]#图片的名字

        img=self.requst(img_url)#获取图片的内容

        f=open("E:\\Python\\Pythonprogram\\妹子图\\"+name+'.jpg','ab')#打开保存路径

        f.write(img.content)保存图片的内容

        f.close()关闭

    def mkdir(self,path):#保存路径的文件

        path=path.strip()

        isExists=os.path.join("E:\Python\Pythonprogram\妹子图%s"%path)是否存在这个路径

        if not isExists:

            print(u'建一个名字叫做:',path,u'的文件夹')

            os.makedirs(os.path.join("E:\Python\Pythonprogram\妹子图%s"%path))#如果不存在创建一个去路径

            os.chdir(os.path.join("E:\Python\Pythonprogram\妹子图%s"%path))#保存图片到路径

            return True

        else:

            print(u'名字叫做',path,u'的文件夹已存在')

            return False

    

 

    Mzitu=mzitu()将妹子图类实例化

    Mzitu.all_url('http://www.mzitu.com/all')#传入参数网址