声明:仅为了学习爬虫,请勿用于商业和恶意爬取数据,否则后果自负,作者享有该文章的所有解释权
原创文章:只需要在程序运行时输入一个数字,就会爬取1-该页数的图片,并且爬取小图对应的详情大图(套图),代码复制可用,下面是我爬取的部分数据。
小图太过性感,这里就不截图了
import requests
import re
import os
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
#referer后面的链接是图片的主页链接,就是你点击某张图是网站判断你是从主页点过来的
'Referer':'https://www.mzitu.com/'
}
url = "https://www.mzitu.com/page/"
def qsbk(page_nums):
for i in range(1,page_nums + 1):
page = str(i)
# 拼接路由 http://www.qiumeimei.com/page/1
page_url = url + page + "/"
# 请求页面数据 注意url=上面修改过的
response = requests.get(url=page_url,headers=headers)
# 获取页面数据
page_text = response.text
#获取图片路径
img_list = re.findall("data-original='(.*?)'",page_text,re.S)
# 到详情页的路径
big_img_list = re.findall('
.*?
',page_text,re.S)
# 定义一个目录
img_path = "./img"
if not os.path.exists(img_path + page):
os.makedirs(img_path + page)
for k,j in enumerate(img_list):
# print(k,j) 索引和url 每个索引和详情页列表的所有一样
# 列表页url
# print(j) https://i.meizitu.net/thumbs/2019/08/190034_16b34_236.jpg
filename = j.split("/")[-1]
response = requests.get(url=j,headers=headers)
small_img = response.content
filenames = img_path + page + "/" + filename
#持久化存储 这个存储的是每个页面的小图
with open(filenames,"wb") as f:
f.write(small_img)
print("正在下载第%s页数据,图片%s下载成功"%(page,filename))
# 先请求详情页的信息,只为判断总页数
detail_url = big_img_list[k]
response = requests.get(url=detail_url,headers=headers)
img_text = response.text
# 页数
nums = re.findall('
.*?
(\d{2})
.*?
', img_text, re.S)
if nums:
num = nums
else:
nums = re.findall('
.*?
(\d{1})
.*?
', img_text, re.S)
num = nums
# 列表取值
number = int(num[0])
# 变量每个小图的详情页
for m in range(2,number):
#首次访问详情页
detail_url = big_img_list[k] + "/" + str(m) +"/"
response = requests.get(url=detail_url,headers=headers)
detail_text = response.text
#正在找到图片----------------------------该找详情页的大图了------------------------------
detail_imgs = re.findall('
.*?
.*?
', detail_text, re.S)[0]
detail_name = re.findall('
.*?
.*?
', detail_text, re.S)
# print(detail_imgs) #['https://i.meizitu.net/2019/06/16d01.jpg']
# print(detail_name) #['好身材就要秀出来']
response = requests.get(url=detail_imgs,headers=headers)
img_texts = response.content
img_name = detail_name[0] #文件夹名字
img_name_single = detail_imgs.split("/")[-1] # 单个文件的名字
new_path = "./img/{}/".format(img_name)
if not os.path.exists(new_path):
os.makedirs(new_path)
new_name = new_path + img_name_single
with open(new_name,"wb") as f:
f.write(img_texts)
print("%s下载完成"%img_name_single)
print("%s下载完成"%detail_name)
#下面这种写法只有在本程序中可用,不能import到其他程序中使用
if __name__ == '__main__':
page_num = int(input("请输入要查询的总页数:"))
qsbk(page_num)