python应用学习(五)——requests爬取网页图片

  • 前言
  • 一、准备
  • 二、代码编写
    • 1.爬取内容
    • 2.保存所需图片并去重
    • 3、调用
  • 三、完整代码
  • 最后

前言

  最近想做一个练练的小游戏给家里的小朋友玩儿,但是苦于选取素材,然后在一个巨佬的博客里找了灵感,就借用一下粉丝的头像试试爬取网页里的图片吧!(感谢各位啦!)


完成总目标:
  爬取粉丝头像作为素材,完成一个连连看的小游戏
故本文分为两部分内容:
1、爬取素材部分;
2、利用素材完成连连看小游戏部分(链接)


(一)爬取粉丝头像

实现目标:

  通过爬虫实现对粉丝头像的爬取并顺序排列存储,作为游戏设计的素材,其中爬取的头像一部分是使用了CSDN的默认头像,存在重复情况,所以还需要去重以得到完整且不重复的图像集

一、准备

1、python环境

2、涉及到的python库需要 pip install 包名 安装

二、代码编写

1.爬取内容

(1)所需要的库

import requests
import json

(2)得到请求地址

url = 'https://blog.csdn.net//phoenix/web/v1/fans/list?page=1&pageSize=40&blogUsername=weixin_45386875'   #关注我的部分请求地址
#url = 'https://blog.csdn.net//phoenix/web/v1/follow/list?page=1&pageSize=40&blogUsername=weixin_45386875'   #我关注的部分请求地址

请求地址获取方法:
右击所要爬取部分页面,点击 审查元素,找到图中文件


注: 页面选到“TA的粉丝(13)”部分才能出现,如果点击Network什么也没有,则需要刷新页面就会出现页面内容了)
(3)带上请求头发送请求,做一些简单伪装

header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36','Cookie' : 'uuid_tt_dd=10_30826311340-1612520858912-361156; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_30826311340-1612520858912-361156!5744*1*weixin_45386875!1788*1*PC_VC; UN=weixin_45386875; p_uid=U010000; ssxmod_itna=Qui=DKiI3hkbG=DXDnD+r8h9eD53ecxPPit5bP1ODlOaYxA5D8D6DQeGTbcW1AoWGATqFYKmEWiH5/gbO4FpjQGcxLbbYx0aDbqGkqnU40rDzuQGuD0KGRDD4GEDCHHDIxGUBuDeKDR8qDg7gQcCM=DbSdDKqDHR+4FbG4oD8PdS0p=C7Gt3AuQ3DmtSije3r424rQ+iPqWzPDA3DK6jiD==; ssxmod_itna2=Qui=DKiI3hkbG=DXDnD+r8h9eD53ecxPPit5bP1D66Ii40vah303pFcXW0D6QALW==0tWLGtzKPUA76xoU10vpqD6AoOqs1R=Db=3olozYp0wVxUS0r/GeZCqzVezFQc8dZon7efYcr=1nhNr6nWKcTqqaDQYcwYSA+hNaqem=WWuDuDQ/+1PGEsN=atvS7WDp07vFuFDherg0AP0KFw0ea6kcTtK2rh/fy=/De0n1FNk+ONYxCXr=QrdTj6gxCuNNWXvp1IDdl2Ckjc=N/cqV6SmHZIZIuOEqml=dHMroMFDvdMVr8afnyQ+sbGPCbt3xdD07tAdRD7uDQ0gT=Bh7OYblbtYQFDDLxD2tGDD===; UserName=weixin_45386875; UserInfo=9863b829527c49a3ba1622396deaa7d9; UserToken=9863b829527c49a3ba1622396deaa7d9; UserNick=ryc875327878; AU=01F; BT=1612846374580; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=%7B%22uid_%22%3A%7B%22value%22%3A%22weixin_45386875%22%2C%22scope%22%3A1%7D%2C%22islogin%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isonline%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isvip%22%3A%7B%22value%22%3A%220%22%2C%22scope%22%3A1%7D%7D; __gads=ID=94978f740e79c9e5-22c918ed05c600ea:T=1613266189:RT=1613266189:S=ALNI_Mbwb8ad5kdYjogF7yImerVAzKaJuQ; dc_session_id=10_1613272889543.735028; announcement-new=%7B%22isLogin%22%3Atrue%2C%22announcementUrl%22%3A%22https%3A%2F%2Fblog.csdn.net%2Fblogdevteam%2Farticle%2Fdetails%2F112280974%3Futm_source%3Dgonggao_0107%22%2C%22announcementCount%22%3A0%2C%22announcementExpire%22%3A3600000%7D; dc_sid=3784575ebe1e9d08a29b0e3fc3621328; c_first_ref=default; c_first_page=https%3A//www.csdn.net/; c_segment=4; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1613222907,1613266055,1613268241,1613273899; TY_SESSION_ID=82f0aa61-9b28-49b2-a854-b18414426735; c_pref=; c_ref=https%3A//www.csdn.net/; c_page_id=default; dc_tos=qoi2fq; log_Id_pv=925; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1613274327; log_Id_view=905; log_Id_click=658'}

获取请求头的方法:


(4)向网页发送请求

try:data = requests.get(url,headers = header).textdata_dist = json.loads(data)except:print('爬取失败')exit ()

2.保存所需图片并去重

定义一些函数备用

#保存文件
def save_imag(file_name,img_url):request.urlretrieve(url=img_url,filename='D:\\ryc\python_learning\\10_linkup\\fan_avatar\\'+file_name)
#删除一个文件夹下的所有所有文件
def del_file(path):ls = os.listdir(path)for i in ls:c_path = os.path.join(path, i)if os.path.isdir(c_path):#如果是文件夹那么递归调用一下del_file(c_path)else:                    #如果是一个文件那么直接删除os.remove(c_path)print ('文件已经清空完成')
#图像去重
def compare_images(pic1,pic2):image1 = Image.open(pic1)image2 = Image.open(pic2)histogram1 = image1.histogram()histogram2 = image2.histogram()differ = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2,histogram1, histogram2)))/len(histogram1))print('differ:',differ)if differ == 0:return 'same'else:return 'diff'
#删除指定位置的图像
def del_avatar(path):if os.path.exists(path):  # 如果文件存在os.remove(path)  else:print('no such file:%s'%(path))  # 则返回文件不存在
#先清空一下文件夹del_file('D:\\ryc\python_learning\\10_linkup\\fan_avatar')index = 0# i 是爬取列表的索引号; index 是保存的图片的索引号for i in range(0,len(fan_list)):fan_username = fan_list[i]['nickname']#print('fans_user%s:'%(i+1),fan_username)fan_avatar_url = fan_list[i]['userAvatar']#print('fans_avatar_url%s:'%(i+1),fan_avatar_url) save_imag('fans_avatar%s.jpg'%(index+1),fan_avatar_url)#print('----------------save_image--fans_avatar%s.jpg'%(index+1))#图片去重for j in range(0,index):if index != j :comp_res = compare_images('./fan_avatar/fans_avatar%s.jpg'%(index+1),'./fan_avatar/fans_avatar%s.jpg'%(j+1))print('--------compare_images:--------'+'./fan_avatar/fans_avatar%s.jpg'%(index+1) + '------with---' + './fan_avatar/fans_avatar%s.jpg'%(j+1))print('comp_res:',comp_res)if comp_res == 'same':del_avatar('D:\\ryc\python_learning\\10_linkup\\fan_avatar\\fans_avatar%s.jpg'%(index+1))print('D:\\ryc\python_learning\\10_linkup\\fan_avatar\\fans_avatar%s.jpg'%(index+1))index = index - 1breakindex = index + 1

3、调用

if __name__ == "__main__":spider_fanavatar()

三、完整代码

# 爬取网页图片
import requests
from urllib import request
import json
from PIL import Image
import os
import math
import operator
from functools import reduce#保存文件
def save_imag(file_name,img_url):request.urlretrieve(url=img_url,filename='D:\\ryc\python_learning\\10_linkup\\fan_avatar\\'+file_name)
#爬取粉丝的头像
def spider_fanavatar():url = 'https://blog.csdn.net//phoenix/web/v1/fans/list?page=1&pageSize=40&blogUsername=weixin_45386875'   #关注我的部分请求地址#url = 'https://blog.csdn.net//phoenix/web/v1/follow/list?page=1&pageSize=40&blogUsername=weixin_45386875'   #我关注的部分请求地址header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36','Cookie' : 'uuid_tt_dd=10_30826311340-1612520858912-361156; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_30826311340-1612520858912-361156!5744*1*weixin_45386875!1788*1*PC_VC; UN=weixin_45386875; p_uid=U010000; ssxmod_itna=Qui=DKiI3hkbG=DXDnD+r8h9eD53ecxPPit5bP1ODlOaYxA5D8D6DQeGTbcW1AoWGATqFYKmEWiH5/gbO4FpjQGcxLbbYx0aDbqGkqnU40rDzuQGuD0KGRDD4GEDCHHDIxGUBuDeKDR8qDg7gQcCM=DbSdDKqDHR+4FbG4oD8PdS0p=C7Gt3AuQ3DmtSije3r424rQ+iPqWzPDA3DK6jiD==; ssxmod_itna2=Qui=DKiI3hkbG=DXDnD+r8h9eD53ecxPPit5bP1D66Ii40vah303pFcXW0D6QALW==0tWLGtzKPUA76xoU10vpqD6AoOqs1R=Db=3olozYp0wVxUS0r/GeZCqzVezFQc8dZon7efYcr=1nhNr6nWKcTqqaDQYcwYSA+hNaqem=WWuDuDQ/+1PGEsN=atvS7WDp07vFuFDherg0AP0KFw0ea6kcTtK2rh/fy=/De0n1FNk+ONYxCXr=QrdTj6gxCuNNWXvp1IDdl2Ckjc=N/cqV6SmHZIZIuOEqml=dHMroMFDvdMVr8afnyQ+sbGPCbt3xdD07tAdRD7uDQ0gT=Bh7OYblbtYQFDDLxD2tGDD===; UserName=weixin_45386875; UserInfo=9863b829527c49a3ba1622396deaa7d9; UserToken=9863b829527c49a3ba1622396deaa7d9; UserNick=ryc875327878; AU=01F; BT=1612846374580; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=%7B%22uid_%22%3A%7B%22value%22%3A%22weixin_45386875%22%2C%22scope%22%3A1%7D%2C%22islogin%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isonline%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isvip%22%3A%7B%22value%22%3A%220%22%2C%22scope%22%3A1%7D%7D; __gads=ID=94978f740e79c9e5-22c918ed05c600ea:T=1613266189:RT=1613266189:S=ALNI_Mbwb8ad5kdYjogF7yImerVAzKaJuQ; dc_session_id=10_1613272889543.735028; announcement-new=%7B%22isLogin%22%3Atrue%2C%22announcementUrl%22%3A%22https%3A%2F%2Fblog.csdn.net%2Fblogdevteam%2Farticle%2Fdetails%2F112280974%3Futm_source%3Dgonggao_0107%22%2C%22announcementCount%22%3A0%2C%22announcementExpire%22%3A3600000%7D; dc_sid=3784575ebe1e9d08a29b0e3fc3621328; c_first_ref=default; c_first_page=https%3A//www.csdn.net/; c_segment=4; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1613222907,1613266055,1613268241,1613273899; TY_SESSION_ID=82f0aa61-9b28-49b2-a854-b18414426735; c_pref=; c_ref=https%3A//www.csdn.net/; c_page_id=default; dc_tos=qoi2fq; log_Id_pv=925; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1613274327; log_Id_view=905; log_Id_click=658'}try:data = requests.get(url,headers = header).text   #得到返回的字符串data_dist = json.loads(data)                     #将字符串转为字典格式except:print('爬取失败')exit ()fan_list = data_dist['data']['list']                #提取所需内容#先清空一下文件夹del_file('D:\\ryc\python_learning\\10_linkup\\fan_avatar')index = 0# i 是爬取列表的索引号; index 是保存的图片的索引号for i in range(0,len(fan_list)):fan_username = fan_list[i]['nickname']#print('fans_user%s:'%(i+1),fan_username)fan_avatar_url = fan_list[i]['userAvatar']#print('fans_avatar_url%s:'%(i+1),fan_avatar_url) save_imag('fans_avatar%s.jpg'%(index+1),fan_avatar_url)#print('----------------save_image--fans_avatar%s.jpg'%(index+1))#图片去重for j in range(0,index):if index != j :comp_res = compare_images('./fan_avatar/fans_avatar%s.jpg'%(index+1),'./fan_avatar/fans_avatar%s.jpg'%(j+1))print('--------compare_images:--------'+'./fan_avatar/fans_avatar%s.jpg'%(index+1) + '------with---' + './fan_avatar/fans_avatar%s.jpg'%(j+1))print('comp_res:',comp_res)if comp_res == 'same':del_avatar('D:\\ryc\python_learning\\10_linkup\\fan_avatar\\fans_avatar%s.jpg'%(index+1))print('D:\\ryc\python_learning\\10_linkup\\fan_avatar\\fans_avatar%s.jpg'%(index+1))index = index - 1breakindex = index + 1#图像去重
def compare_images(pic1,pic2):image1 = Image.open(pic1)image2 = Image.open(pic2)histogram1 = image1.histogram()histogram2 = image2.histogram()differ = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2,histogram1, histogram2)))/len(histogram1))print('differ:',differ)if differ == 0:return 'same'else:return 'diff'#删除指定位置的图像
def del_avatar(path):if os.path.exists(path):  # 如果文件存在os.remove(path)  else:print('no such file:%s'%(path))  # 则返回文件不存在#删除一个文件夹下的所有所有文件
def del_file(path):ls = os.listdir(path)for i in ls:c_path = os.path.join(path, i)if os.path.isdir(c_path):#如果是文件夹那么递归调用一下del_file(c_path)else:                    #如果是一个文件那么直接删除os.remove(c_path)print ('文件已经清空完成')
if __name__ == "__main__":spider_fanavatar()

最后

第一部分内容就到这里,第二部分内容将在下一篇文章完成,感兴趣的小伙伴可以关注我,然后去看下一片文章哦!

  都读到这里了,各位亲爱的读者留下你们宝贵的赞和评论吧,这将是我继续前进的坚定动力!!!

其他python应用实例见:https://blog.csdn.net/weixin_45386875/article/details/113766276

python应用学习(五)——requests爬取网页图片相关推荐

  1. Python学习笔记:爬取网页图片

    Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...

  2. python爬虫入门教程:爬取网页图片

    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的.而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程: 准备工作 语言:python IDE:py ...

  3. 【Python】学习笔记 #1 —— 爬取网页筛选数据全过程

    目录 Step 1:下载requests包 Step 2:导包 Step 3:requests使用 Step 4:Re的使用 Step 5:os的使用 Step 6:保存文件 Step 7:综合案例 ...

  4. 使用Python爬取网页图片

    使用Python爬取网页图片 李晓文 21 天前 近一段时间在学习如何使用Python进行网络爬虫,越来越觉得Python在处理爬虫问题是非常便捷的,那么接下来我就陆陆续续的将自己学习的爬虫知识分享给 ...

  5. python爬取网页图片详解

    文章目录 什么是爬虫 爬取网页图片实现步骤 第一步:打开所操作的网站(任意一个网站) 第二步:通过python访问这个网站 第三步:点击F12查询相关信息 第四步:爬取图片,下载到本地 第五步:显示测 ...

  6. 上手快!!福利局!新手如何使用python爬虫爬取网页图片(使用正则进行数据解析)当然这个新手是我自己

    作为一个python新入门小白,突然就想发个博客,一方面为了记录学习历程,一方面能分享给新入门的同学经验,更多的是想和大家一起学习和交流.以下是我以小白的角度分享的爬虫的相关知识和一个简单的爬取网页图 ...

  7. python爬虫学习 之 定向爬取 淘宝商品价格

    python爬虫学习 之 定向爬取 淘宝商品价格 import requests import redef getHTMLText(url):try:r = requests.get(url, tim ...

  8. 利用python爬取网页图片

    学习python爬取网页图片的时候,可以通过这个工具去批量下载你想要的图片 开始正题: 我从尤物网去爬取我喜欢的女神的写真照,我们这里主要用到的就两个模块 re和urllib模块,有的时候可能会用到t ...

  9. Python爬取网页图片至本地

    Python爬取网页图片至本地 爬取网页上的图片至本地 参考代码如下: # -*- codeing = utf-8 -*- import requests import rephotos = [] h ...

  10. 一个咸鱼的python_一个咸鱼的Python爬虫之路(三):爬取网页图片

    学完Requests库与Beautifulsoup库我们今天来实战一波,爬取网页图片.依照现在所学只能爬取图片在html页面的而不能爬取由JavaScript生成的图. 所以我找了这个网站 http: ...

最新文章

  1. debian+pxe+preseed.cfg 安装配置
  2. python语言及其应用-Python语言及其应用.PDF
  3. uwsgi xml 配置
  4. jQuery和MooTools的真正区别
  5. php document.getel,javascript 密码强弱度检测万能插件_javascript技巧
  6. 前端干货之JS最佳实践
  7. 对于spring的一些巩固一些难点的理解 2021-04-18
  8. 《编译原理》学习笔记 ·001【第一章:总论】
  9. 44.mysqlbinlog
  10. livereload(自动刷新)
  11. 在Excel中批量生成二维码标签,标签中可添加二维码或者条形码
  12. 红米note9pro刷鸿蒙,红米Note9Pro稳定版刷机包(官方系统固件升级包MIUI11)
  13. canon iPF 系列保养墨盒清零方法
  14. 如何删除难卸载的软件
  15. 制作sim卡 服务器,diao丝绅士日记-自己撸系列 篇一:从此不再做diao丝-自制SIM卡套篇...
  16. 相机成像时间与曝光时间的关系
  17. 坠落弹球(Bouncing off the walls)
  18. CVPR 2019 | SPADE 阅读笔记(翻译)
  19. Andorid moudle中的activity跳转到主项目的activity
  20. 图像和像素(Images and Pixels)

热门文章

  1. 联想开机按f2怎么修复系统图解_联想笔记本开机f2修复电脑步骤 - 卡饭网
  2. 【瑞利衰落信道】理论+模型+仿真
  3. Android报错:The processing instruction target matching [xX][mM][lL] is not allowed.
  4. JAVA编译器eclipse的安装教程
  5. 支持移动触摸的jQuery图片Lightbox插件
  6. 谷歌地图高精度模型提取3
  7. 基于微信小程序的小区防疫监管小程序-计算机毕业设计源码+LW文档
  8. PCWorld:HTML5会终结移动应用程序吗?
  9. qt linux 网络聊天室,QT tcp网络聊天室群聊的实现
  10. java读取类字段名-BeanUtils.describe与PropertyUtils.describe(javaBean转map)