Python爬取mn52网站美女图片以及图片防盗链的解决方法
程序员文章站
2022-03-21 21:28:49
防盗链原理 防盗链原理 http标准协议中有专门的字段记录referer 一来可以追溯上一个入站地址是什么 二来对于资源文件,可以跟踪到包含显示他的网页地址是什么 因此所有防盗链方法都是基于这个Referer字段 so:很多网站使用防盗链的方法来设置反爬虫机制,设置这种机制后通过图片路由直接访问会返 ......
防盗链原理
http标准协议中有专门的字段记录referer
一来可以追溯上一个入站地址是什么
二来对于资源文件,可以跟踪到包含显示他的网页地址是什么
因此所有防盗链方法都是基于这个referer字段
so:很多网站使用防盗链的方法来设置反爬虫机制,设置这种机制后通过图片路由直接访问会返回403错误,
其实解决办法很简单,加入header,然后把referer写入即可!
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': url }
本文爬取https://www.mn52.com/网站上面的清纯美女图片,代码如下;
# 需要的库 import requests import re import os from multiprocessing import pool # 主函数 def get_img(url): # 设置图片存储路径 path = './mn52/' if not os.path.exists(path): os.mkdir(path) # 请求头,因为图片路由有防盗链设置所以在headers中添加'referer': url 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': url } try: # 请求主页面路由 response = requests.get(url=url,headers=headers) # print(response.text) # 正则提取并遍历获取分页面 res_paging = re.findall('<div class="picbox">.*?<a href="(.*?)"',response.text,re.s) for i in res_paging: # 拼接分页面路由 url_infos = 'https://www.mn52.com' + i # 请求分页面路由 res_details = requests.get(url=url_infos,headers=headers) # 遍历获取图片路由 res_detail = re.findall('<div class="img-wrap">.*?<img .*?rel="(.*?)"/>',res_details.text,re.s) for i in res_detail: # 拼接图片路由 img_urls = 'https:'+i # 给图片命名 filename = i.split('/')[-1] # 判断图片是否已下载 if os.path.exists(path+str(filename)): print('图片已存在') else: # 请求图片连接 res = requests.get(url=img_urls,headers=headers) # 保存图片 with open(path+str(filename),'wb') as f: f.write(res.content) # 打印下载信息 print('正在下载:'+img_urls) except exception as e: print(e) # 程序入口 if __name__ == '__main__': # 构造完整路由 urls = ['https://www.mn52.com/meihuoxiezhen/list_2_{}.html'.format(i) for i in range(1,94)] # 开启多进程 pool = pool() # 启动程序 pool.map(get_img,urls) print('抓取完成')
图片比较多,需要一些时间下载,控制台显示的下载过程
打开文件查看图片是否下载成功
done
上一篇: 解决vscode中golang插件依赖安装失败问题
下一篇: HTML+CSS常用代码(笔记)