前言
最近刘亦菲的新戏《花木兰》已经预热很久,微博上也火到不行,花木兰剧照中,刘亦菲身负戎装,眼神坚毅,英姿飒爽。第一次见刘亦菲也有这么土气的一面。哈哈
仔细想想,喜欢刘亦菲已经十四五年了,所谓 一见钟情不过外貌作祟,而日久生情才知其钟灵毓秀 。附上我心目中最美小龙女美照。
话不多说,上代码开撸。
正文
爬取网站 :美桌
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()