花瓣网,是国内著名的图片阅览网。有很多极具设计想法的图片,设计师可以在这里查找灵感。

今天,就来做一个爬虫,爬指定的图片。

第一步,分析花瓣网的AJAX

进入花瓣网,是个搜索框。

输入一个“网页设计”,进入搜索结果页面。往下拉动,图片还会自动增加,很明显这个是AJAX的结果。

F12,查看 network,分析下载的文件。主要分析 XHR(就是 XMLHttpRequest,AJAX 请求)。记得勾选“Preserve log” 保留每次刷新的文件目录。第一次打开,什么都看不到,需要刷新一下页面,进行加载就行了。

分别点这三个文件,看右边的 Reponse 响应结果,发现它们都跟页面内容无关,都是些不痛不痒的数据。

往下拉动页面,发现左边新增了一个文件,点它,果然页面数据就在这里了。

第二步,分析花瓣网的数据

把上面的那个文件,response 响应回来的内容复制出来,找个工具格式化。推荐 https://www.sojson.com/

但是发现这个JSON 里没有传统的图片地址~!!!

回到花瓣网的页面,Elements,查看图片

发现图片的地址本身就很诡异,不是传统的 jpg ,png 结尾。复制出来是这个样子:

//hbimg.huabanimg.com/68f6594f57ffcb237584802a95526886e98754655d057-zXvsGM_fw236

很明显用了CDN位置,完整路径应该是:

https://hbimg.huabanimg.com/68f6594f57ffcb237584802a95526886e98754655d057-zXvsGM_fw236

复制到浏览器地址栏中,果然打开了。

遂复制  68f6594f57ffcb237584802a95526886e98754655d057-zXvsGM_fw236 ,在刚刚那个 JSON 中去查找,居然找不到~!!

隐藏的够深~~!!

仔细观察,发现  68f6594f57ffcb237584802a95526886e98754655d057-zXvsGM_fw236   前面部分似乎就是 JSON 的 key 字段~!!

把后面的_fw236  去掉试试,还是可以打开图片。看来,花瓣隐藏的很深啊~!!!(写到这里,把刚刚那个字段弄丢了,原图不知道是哪个了,就换个字段,道理是一样的。尴尬~)

https://hbimg.huabanimg.com/af8ee6b8aa9bbe64146ef5c6e2491cedb49f3a90126be7-EJu5cA

(点开,还是可以看到图片)也就是说,我们用  https://hbimg.huabanimg.com/ 结合 JSON 的key 字段,就可以得到 图片的地址。

果然找到:(刚刚那个字段丢了,重新截图一个,是其他的数据,道理一样的。)

步骤三:分析 JSON 地址和请求参数

看下那个文件的地址和请求方法,原来是 get 方式,那么地址后面的参数就用 params 添加。

猜都猜的到,page 是第2 页的数据,每页20个。如果把 page 改成1,per_page 改成 50,就是获取了前 50 张图。

不敢爬太多,怕花瓣封我的 IP,还是低调点。

爬虫,千万不要影响网站的正常运营,否则就犯法了,进橘子就不好玩了~~

第四步,编码

# -*- coding:utf-8 -*-
import  requests,os,jsonbaseurl = "https://hbimg.huabanimg.com/"  # 图片地址公用部分
imgs = []   # 图片存储的list
weburl = r"https://huaban.com/search"     # 请求地址
kw = input("请输入你要查找的图片:")   # 添加个输入,这样要什么图,自己写就是
# 构建 get 参数。
params = {"q": kw,"k765peeh":"","page": 1,"per_page": 50,"wfl": 1
}
# 设置请求 headers,伪装浏览器 并接受中文数据
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
}
req = requests.get( url=weburl, params=params, headers=headers)
req.encoding="utf-8"   # 设置请求编码
#  这个地方画板有个坑,请求的结果是搜索结果HTML页面。数据在第19行~!!
req_json_txt = req.text.split("\n")[18]  # 获取数据相关字符串
# 字符串的第19个字符开始到倒数第二个字符是 json 字符串,最后一个符号是分号。
# 这里不详细解释,大家自己操作下就知道了。
# print( req_json_txt )
req_json =json.loads(req_json_txt[18:-1])   # 把字符串转为 JSON,其实是 list 列表数据。
# print( req_json )
# 列表的每个元素都是 dict,图片名字就放在 file 字段的 key 字段里。
for item in req_json :imgs.append( baseurl+ item["file"]["key"] )  # 拼接图片数组
# print( imgs )
# 遍历图片地址 list,下载对应图片到指定文件夹中。文件名用的是网络中的名字。
for item in imgs:img_req = requests.get(item,headers=headers)with open("huaban/"+item.split("/")[-1]+".jpg", "wb" ) as f:f.write(img_req.content)

详细代码就不解释了,请看注释。

这里有个小坑,就是请求的结果居然是 搜索结果 HTML,而不是我以为的单纯的JSON,而且这个页面还是 VUE写的。好在数据都在页面上,就用以下代码获取对应字符串。

req_json_txt = req.text.split("\n")[18]   

搜索的“美人”图,关键还是大图,不是缩略小图。花瓣真良心~哈哈,虽然不是超大的图,但是作为设计灵感的参考,我觉得完全够用~!!如果要想获得更多的图,修改参数就行。但是不要太多,贪心可不好哦~

Python学习笔记9-爬花瓣网指定图片,从此找图不用愁相关推荐

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

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

  2. Python学习笔记,爬取笔趣阁小说

    学习了基础的语法,然后网上看到有人分享利用python爬取小说,自己拷贝了代码尝试了一下. 1. 环境准备 安装 BeautifulSoup4 和 lxml & C:/Python39/pyt ...

  3. Python学习笔记之爬取网页保存到本地文件

     爬虫的操作步骤: 爬虫三步走 爬虫第一步:使用requests获得数据: (request库需要提前安装,通过pip方式,参考之前的博文) 1.导入requests 2.使用requests.get ...

  4. python学习笔记爬虫——爬取智联招聘信息

    目的:自己输入指定地方,指定职业,起始页数,程序会自动打印页面的所有信息. 实现过程:这次程序的代码跟以往的都不一样,这次也是我第一次使用面向对象式编程,并且并不是分析网页代码,分析json字符串得到 ...

  5. python学习笔记 之爬取图片

    目的:根据输入的导航条名 获取对应的图片并分类保存到本地 首先导入所需要的模块,如果提示报错,显示未安装 就到cmd中使用pip 安装就可以了 import requests,os,shutil im ...

  6. python学习笔记 存储爬到的数据

    一.csv文件写入与读取 import csv #引用csv模块. csv_file = open('demo.csv','w',newline='',encoding='utf-8') #创建csv ...

  7. Python学习笔记:利用mplfinance的plot绘制K线图

    文章目录 一.从mpl-finance转到mplfinance 1.安装mpl-finance模块 2.导入mpl_finance模块出现警告 3.安装mplfinance模块 4.安装pandas. ...

  8. python 异步加载_Python学习笔记4——爬取异步加载数据

    一.什么是异步加载? 在之前的学习笔记中,爬取的网页是需要手动翻页的网址,但是一些网站是通过自动加载翻页的,如knewone网页.浏览knewone的官网就能发现,当下拉到网页最下端时,网站会自动加载 ...

  9. Python 学习笔记 第三篇 Python实现网易云评论网页爬虫+词云展示 (Pycharm+Mysql)

    初始条件,具体可见我的其他文章. 1.安装Python.Python 学习笔记 第一篇 Python的安装与配置 2.安装Pycharm,并导入第三方包.Python 学习笔记 第二篇 Python ...

最新文章

  1. 【HDU/算法】最短路问题 杭电OJ 2544 (Dijkstra,Dijkstra+priority_queue,Floyd,Bellman_ford,SPFA)
  2. Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败...
  3. Linux之文件管理(一)
  4. 给 Flutter 界面切换来点特效
  5. 【ArcGIS风暴】根据海拔(坡度)范围分级统计土地覆盖的类型和面积(兰州市GlobeLand30m数据为例)
  6. 宝塔php gd库,宝塔面板安装 EasyImag – 一款最简单图床的安装体验
  7. macos xampp mysql 命令_MAC系统XAMPP 中 MySQL命令行client配置使用
  8. NOIP 2015 提高组 Day2
  9. java flushdb_JAVA - Redis
  10. Mac OS X / IOS 内存管理机制简要说明
  11. Myeclipse学习总结(10)——MyEclipse2014导入项目时The project was not built since its build问题
  12. js中短路运算符 ||
  13. Javascript中try finally的细微差别
  14. atitit 常见个人与企业与组织机构的信息化.docx
  15. 数据库原理与应用——课程介绍及数据库系统概论(上)
  16. aka鉴权 ims_宋月:IMS鉴权过程中各参数的用途
  17. 惠普台式电脑引导不了系统_惠普(HP)电脑安装不了GHOST系统的解决方法
  18. 使用UDP实现群聊聊天室
  19. 基站定位经纬度查询免费api接口-LBS数据仓库
  20. 离职当天,删库跑路,京东到家程序员被判刑

热门文章

  1. 阿里云、腾讯云等如何运用IPFS技术做存储?
  2. 微信小程序App(Object object)
  3. 记录自己的支付集成(微信支付宝)
  4. 计算机中没有固态硬盘,为何我的固态硬盘没有预想中快?
  5. 专业的幼儿园设计公司是怎样的?
  6. Keil和Proteus联调方法
  7. 怎么查看gpu服务器的系统和版本,linux 查看服务器gpu
  8. 基于三维激光点云的树木建模(枝叶分离)
  9. ewomail 本地发送邮件接收不到_CentOS下搭建EwoMail邮件服务器的几个小诀窍
  10. 虚拟化技术 hyper-v