博客
关于我
写博客没高质量配图?python爬虫教你绕过限制一键搜索下载图虫创意图片!
阅读量:443 次
发布时间:2019-03-06

本文共 1632 字,大约阅读时间需要 5 分钟。

文章配图之道:如何通过爬虫抓取高质量图片

在我们写文章(博客、公众号、自媒体)的时候,常常觉得自己的文章有些老土,这很大程度是因为配图没有选好。笔者也曾遇到过相同的困扰,顺便解决其中一个案例,为大家提供一些技术上的参考和借鉴!

对于图片的选择,我们通常会遇到两种情况:非高清或者带水印。这两种情况都是我们所忌讪的东西。笔者这次通过图虫创意抓取高清小图,虽然不是大图,但在火热的移动端阅读上是足够的!

分析与解决方案

理想状态

我们的理想状态是一个网页,图片直接嵌入在html中。这种情况就像你写的博客或个人网站上的图片,简单地通过爬虫解析即可。或者通过后台AJAX传输图片地址引用。我们不清楚这种方式是否可行!

实际分析

很遗憾,理想状态难以实现。考虑到图片作为核心业务,需要注册、购买等流程,直接嵌入的想法显然不可行。那么它到底是如何实现的呢?我们来详细分析一下!

打开网页,检查图片来源发现有两个主要域名:ice 和 wel,并且编号不唯一。但我们发现相同域名不同后缀的图片地址效果相同(例如 icweiliimg9 和 icweiliimg/)。查看网页源代码发现并没有我们想要的图片地址。这意味着图片可能通过AJAX渲染,或者藏在JavaScript中进行混淆或加密。

通过分析发现,图片数据确实藏在JavaScript中。由于URL随着请求变化,返回的数据也必然不同,因此可以通过模拟请求来获取所需图片数据。接下来,我们就来详细讲述爬虫实现的过程。

爬虫实现

经过测试发现,目标网页需要进行某些验证,包括 cookies 中的 wluuid 字段(仅验证存在,不验证正确性)。因此,我们需要编写一段代码来获取网页的HTML内容。然而,图片数据藏在JavaScript中,这意味着我们只能通过正则表达式来提取所需的图片信息。

通过 BeautifulSoup 提取 JavaScript 代码片段即可获取相关信息。例如:`js = soup.select('script')[4]`。对于有用数据,只能通过正则表达式进行截取。我们可以编写一个正则表达式来提取图片地址。例如:

import refrom bs4 import BeautifulSouppattern = re.compile(r'window.hits = (\[)(.*)(\])')match = pattern.search(str(js))if match:    data = match.group(2)    # 通过处理data字符串获取图片地址    # 例如:替换所有','为',,,',然后分割    data = data.replace('}', ',', '').split(',')    # 最终得到一个包含图片地址的列表    for url in data:        # 下载图片并存储        pass

需要注意的是,图片下载时可能会遇到无名图或重复名的问题,因此建议在下载前进行编号处理。同时,两个域名的图片地址需要分别尝试下载,确保能获取到高清图片。

其他注意事项

图片下载:

  • 为了避免重复下载或命名冲突,可以为图片编号。例如:图片名为`image-001.jpg`。
  • 两个域名的图片地址需要尝试下载,其中一个成功即可完成下载。

爬虫方面:

  • 全程无需登录,下载的图片为小图。但由于技术限制,后续可以研究登录后的大图下载方法并分享给大家!

其他:

  • 创建图片存储路径时,确保路径存在。可以通过`os.makedirs` 检查并创建路径。

效果与总结

通过上述方法,我们成功实现了自动下载图片的功能。测试结果表明,只需输入关键词即可实现自动下载,虽然图片为小图,但在移动端阅读时效果不错!这也证明了数据结构与算法的重要性。通过扎实的数据结构与算法基础,处理问题变得不再难题。如果你也对数据结构与算法感兴趣,可以关注我的公众号:bigsai。

转载地址:http://ppvkz.baihongyu.com/

你可能感兴趣的文章
OS第6章 —— 设备管理
查看>>
OTA测试
查看>>
Oulipo
查看>>
Outlook 2010 Inside Out
查看>>
overlay(VLAN,VxLAN)、underlay网络、大二层概述
查看>>
OWASP漏洞原理<最基础的数据库 第二课>
查看>>
OWL本体语言
查看>>
P with Spacy:自定义文本分类管道
查看>>
P-DQN:离散-连续混合动作空间的独特算法
查看>>
P1035 I need help
查看>>
P1073 最优贸易
查看>>
P1364 医院设置
查看>>
P1865 A % B Problem
查看>>
P2260 [清华集训2012]模积和
查看>>
P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?
查看>>
P4313 文理分科
查看>>
SpringBoot中集成LiteFlow(轻量、快速、稳定可编排的组件式规则引擎)实现复杂业务解耦、动态编排、高可扩展
查看>>
SpringBoot中集成influxdb-java实现连接并操作Windows上安装配置的influxDB(时序数据库)
查看>>
P8738 [蓝桥杯 2020 国 C] 天干地支
查看>>
package,source folder,folder相互转换
查看>>