博客
关于我
写博客没高质量配图?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/

你可能感兴趣的文章
openSUSE 13.1 Milestone 2 发布
查看>>
openSUSE推出独立 GUI 包管理工具:YQPkg,简化了整个软件包管理流程
查看>>
OpenVP共用账号 一个账号多台电脑登录
查看>>
OpenVSwtich(OVS)Vlan间路由实战 附实验环境
查看>>
Openwrt LuCI模块练习详细步骤
查看>>
openwrt_git_pull命令提示merger冲突时如何解决?
查看>>
OpenWrt包管理软件opkg的使用(极路由)
查看>>
OpenWrt固件编译刷机完全总结
查看>>
Open××× for Linux搭建之二
查看>>
Open×××有线网络时使用正常,无线网络时使用报错的解决方案
查看>>
Opera Mobile Classic Emulator
查看>>
Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
查看>>
OperationResult
查看>>
Operations Manager 2007 R2系列之仪表板(多)视图
查看>>
operator new and delete
查看>>
operator new 与 operator delete
查看>>
operator() error
查看>>
OPPO K3在哪里打开USB调试模式的完美方法
查看>>
oppo后端16连问
查看>>
OPPO软件商店APP侵权投诉流程
查看>>