每日爬虫:爬取刘亦菲最美剧照

前言

最近刘亦菲的新戏《花木兰》已经预热很久,微博上也火到不行,花木兰剧照中,刘亦菲身负戎装,眼神坚毅,英姿飒爽。第一次见刘亦菲也有这么土气的一面。哈哈
在这里插入图片描述
仔细想想,喜欢刘亦菲已经十四五年了,所谓 一见钟情不过外貌作祟,而日久生情才知其钟灵毓秀 。附上我心目中最美小龙女美照。
在这里插入图片描述
话不多说,上代码开撸。

正文

爬取网站 :美桌
在这里插入图片描述

1、说明:

1、该网站并没有robots协议,因此可以任意爬取。标题虽说爬取刘亦菲剧照,但是放开self.name,可以批量爬取该网站下所有明星图片。
2、每天都会找几个爬虫案例来练练手并分享到CSDN,有一起学习python的小伙伴可以加个好友一起学习呀!!

2、技术路线

requests+re+pypinyin
pypinyin库主要作用是将 汉字名字转化为拼音

3、代码

'''
 爬刘亦菲剧照
 version:02
 author:金鞍少年
 date:2020-02-27
'''
from pypinyin import lazy_pinyin
import requests
import re
import os

class starImage():
    def __init__(self):
        # self.name = input("请输入你喜欢的明星的名字:")  # 放开这个地方可以下载网站内其他明星剧照
        self.name = '刘亦菲'   
        self.nameUrl = "http://www.win4000.com/mt/" + ''.join(lazy_pinyin(self.name)) + ".html"
        self.path = r'./明星'+'/'+self.name

    def getHTMLText(self,url):
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
            'referer': 'http://www.win4000.com/mt/star.html'
        }
        re = requests.get(url, headers=headers, timeout=10)  # 设置超时时间
        if re.status_code == 200:
            re.encoding = re.apparent_encoding   # 以网站编码为准
            return re.text

    # 获取详情页网址
    def getPageUrls(self,Text):
        re_pageUrl = re.findall('<a target="_blank" href="(.*?)">',Text)
        # print(re_pageUrl)
        return re_pageUrl

    # 下载图片
    def downloadPic(self,pageUrls):
        for i in range(len(pageUrls)):
            pageHtmlTxet=self.getHTMLText(pageUrls[i])
            photoName = re.findall('<div class="ptitle"><h1>(.*?)</h1>', pageHtmlTxet)[0]  # 图集名

            photoList = re.findall('data-original="(.*?)" alt="%s"'%photoName,pageHtmlTxet)  # 图片URL
            for index, jpg in enumerate(photoList):
                jpg = jpg.replace('_130_170','')

                path = self.path+'//'+photoName+'//'  # 创建存放路径
                if not os.path.exists(path):
                      os.makedirs(path)  # 递归创建文件夹
                img = requests.get(jpg)
                with open(path + '%s.jpg' % (index), 'wb') as f:
                    f.write(img.content)
                    print('下载 %s的%d图片成功' % (photoName, index))

    # 逻辑业务
    def fun(self):
        try:
            Text = self.getHTMLText(self.nameUrl)  # 第一页
            self.downloadPic(self.getPageUrls(Text))   # 下载第一分页所有图片
            nextPage = re.findall(r'next" href="(.+)"', Text)[0]  # 第二页
            self.downloadPic(self.getPageUrls(self.getHTMLText(nextPage)))  # 下载第二分页所有图片
            try:
                while (nextPage):
                    nextText = self.getHTMLText(nextPage)  # 其他分页
                    nextPage = re.findall(r'next" href="(.+)"', nextText)[0]
                    self.downloadPic(self.getPageUrls(self.getHTMLText(nextPage)))  # 下载第三页至结束的所有图片
            except IndexError:
                    print("已全部下载完毕")
        except TypeError:
            print("不好意思,没有{}的照片".format(self.name))

if __name__=='__main__':
    g = starImage()
    g.fun()
发布了46 篇原创文章 · 获赞 37 · 访问量 4514

猜你喜欢

转载自blog.csdn.net/weixin_42444693/article/details/104548386