教新手小白如何通过五分钟学会用Python爬取女神照片
今天咱们要爬取花瓣网 设计师寻找灵感的天堂!有海量的图片素材可以下载,是一个优质图片灵感库
这次我们用 requests 登录花瓣网 , 爬取页面 , 再用正则与json提取有用信息 , 最后把获取的图片信息 保存到本地
一 、用到技术
- python 基础
- requests 登录页面获取session用户会话 , 下载图片
- 正则表达式 提取页面的有用信息
- json解析页面中的图片
文章插图
四、安装 必要的库
- win+R 打开运行
- 输出cmd 进入控制台
- 分别安装requests
pip installrequests 1
五、分析页面- 页面规律我们单击分页按钮 , 拿到页面最后一个参数的规律第一页:search/?q=女神 --tt-darkmode-color: #C7254E;">search/?q=女神 --tt-darkmode-color: #999999;">2.登录
文章插图
通过Fiddler我们查看到登录请求的地址和参数
# 地址auth/# 参数 "email": "******", "password": "*****", "_ref":"frame"123456
我决定使用requests的session()功能来获取用户登录后的会话session信息
3. 页面信息我们通过右键查看源代码发现数据是保存在javascript里面的我们准备用正则表达式提取页面信息
文章插图
六、全部代码#-*- coding:utf-8 -*-import requestsimport reimport json# 导入 requestsre正则 json'''login登录花瓣 获取session'''def login():login_url = 'auth/'# 登录地址headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0","Accept": "application / json","Content-type": "application/x-www-form-urlencoded; charset=utf-8","Referer": "",}# 请求头信息session = requests.session()#sesson 会话login_data = http://kandian.youth.cn/index/{"email": "zengmumu%40126.com","password": "zmm123","_ref":"frame"}response = session.post(login_url, data=http://kandian.youth.cn/index/login_data, headers=headers,verify=False)# 登录页面getPic(session,5)# 获取图片 , 前5页'''getPic解析页面中的图片地址session 会话信息num最大是页数'''def getPic(session,num):for i in range(1,num+1):response = session.get("search/?q=%E5%A5%B3%E7%A5%9E\napp.page\[\"page\"\]', response.text, re.M | re.I | re.S)# 提取到当前页面所在的所有图片信息data = http://kandian.youth.cn/index/json.loads(data.group(1))# 转换字符串为列表for item in data:url ="" + item["file"]["key"]# 拼接图片地址index = item["file"]["type"].rfind("/")type = "."+item["file"]["type"][index + 1:]# 获取图片的类型file_name = item["raw_text"]# 获取图片的中文名download_img(url, file_name,type)# 下载图片'''下载图片url图片的地址name图片的中文名type图片的类型'''def download_img(url,name,type):response = requests.get(url,verify=False)# 使用requests 下载图片index = url.rfind('/')file_name = name+url[index + 1:]+type# 获取图片的hash值print("下载图片:" + file_name)# 打印图片名称save_name = "./photo/" + file_name# 图片保存的地址(注意photo要自己建一个 , 与当前.py文件同一个文件夹)with open(save_name, "wb") as f:f.write(response.content)# 写入图片到本地'''定义主函数'''def main():login()# 如果到模块的名字是__main__ 执行main主函数if __name__ == '__main__':main()
推荐阅读
- 大一非计算机专业的学生,如何利用寒假自学C语言
- 红米K40渲染图曝光:居中挖孔+后置四摄,这外观你觉得如何?
- 奋斗|该如何看待拼多多员工猝死:鼓励奋斗,也要保护好奋斗者
- 装机点不亮 如何简易排查硬件问题?
- 虾米音乐宣布关停!我的歌单如何导入QQ音乐、网易云音乐?
- 视频小白们的外挂装备:百视悦R5监视器+T2提词器套装上手
- 人脸识别设备主板如何选型 软硬整合大幅缩短开发时间
- HTC新手机曝光!薄荷色后盖可能是HTC Desire 20 Pro
- Mini-LED产品效果究竟如何?
- 专家介绍如何判断智能手机被入侵:运行速度变慢、电池消耗过快以及卡顿