天蓬老师2017-04-10 15:27:052楼

获取不到是指?

按理来说,只要你是通过 API 去获取的话,图片的地址一定是能获取到的(因为我也写过一个网页版的知乎日报(前端有点渣,写得有点烂,迟点可能要下线了。。),到现在依然能正常工作)。

但是,如果你是在网页上直接引用 API 里提供的图片地址的话,那么恭喜你,403 Forbidden,知乎那边开启了防盗链功能。

这样,我们就用不了了吗?不!当你在浏览器新的标签/窗口直接访问图片地址的话,你是能看到图片的。知乎的防盗链原理是检查 refer 是否为空或者是否为知乎的网站。

那么我们可以用 JS 来把图片放在一个 iframe 里,再把 iframe 的边框设置为 0,具体代码如下:

var count = 0;

window.img_array = new Array();

// create a img frame

function create_img_iframe(url)

{

var frameid = 'frameimg' + Math.random();

window.img = '%5C''+url+'?'+Math.random()+'%5C'

window.img_array[count] = window.img;

ifr = document.createElement('iframe');

ifr.src = "javascript:parent.img_array[" + count + "];";

ifr.frameBorder="0";

ifr.scrolling="no";

ifr.width="100%";

ifr.id = frameid;

count++;

return ifr;

}

// hotlink, param id is the img parent id

function hotlink_under_id(id)

{

var p = document.getElementById(id);

imgs = p.getElementsByTagName('img');

while (imgs.length > 0)

{

src = imgs[0].src;

ifr = create_img_iframe(src);

imgs[0].parentNode.replaceChild(ifr, imgs[0]);

}

}

上面那些代码不是我原创,我是基于网上的一个大神修改的貌似(不记得有没有修改过了。。反正到时很认真地去看过这一段代码的原理),具体出处忘了,囧

上面这种方法其实也不是特别完美,因为这样弄之后图片底部会被切掉一些些(在 iframe 中的位置造成部分被隐藏)。个人感觉更好的解决方案应该是:

用自己的服务器把图片缓存起来,然后把 API 中的图片地址进行替换

不管你用哪种方法,一定要注意版权问题啊!

php 获取 知乎,php - 如何获取知乎日报里的图片?相关推荐

  1. 知乎个人答案获取 然后vscode 的文件夹搜索,因为知乎没有自己的答案搜索

    知乎个人答案获取 然后vscode 的文件夹搜索,因为知乎没有自己的答案搜索 知乎个人答案获取

  2. php编译工具 知乎,关于知乎回答问题编辑框用Ctrl+V 粘贴图片是如何实现的详解...

    貌似我没有像QQ邮箱之类的装知乎的插件 是用HTML5的新功能实现的吗? 看了@朱利安 的回答,发现我描述的不够清楚 我是用QQ截图之类的工具截的图,然后图片本身是保存在剪切板里的,剪切板中保存的*不 ...

  3. python爬虫知乎代码_python爬虫知乎的简单代码实现

    随着时代的发展,我们很依赖网络帮助我们解决问题,遇到什么问题就会先百度.除了百度,现在大多数人还会选择通过知乎来解决问题.知乎类似于一个论坛,讨论度比百度高一些,那你知道如何用python爬虫爬知乎网 ...

  4. python爬取知乎话题广场_知乎一共有多少个话题?

    上图可知,它是通过请求POST接口来取得知乎话题数据,接口信息: 其中topic_id指大分类下的id,offset是指偏移量,指每次执行next方法加载的子话题数量,hash_id可以为空我们暂时忽 ...

  5. java 获取泛型的type,如何获取泛型的Type类型

    开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...

  6. DBSCAN的两个核心参数是什么?如何获取最佳参数?如何可视化获取的过程?

    DBSCAN的两个核心参数是什么?如何获取最佳参数?如何可视化获取的过程? sklearn中含有DBSCAN密度聚类算法 cluster.DBSCAN DBSCAN:Density-Based Spa ...

  7. php获取头像,WordPress中用于获取及自定义头像图片的PHP脚本详解

    get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供一个 get_avatar 过滤器,用来过滤头像的 Html ...

  8. mysql获取当月数据_MySQL中获取天、周、月等数据

    MySQL中获取天.周.月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 ...

  9. 网站推广流量获取仍需寻找全新获取网站推广流量渠道

    每天面对实时变化的用户需求市场,站长们想通过巩固自家网站流量以保持日常运营很难,还是要靠获取新流量的方式弥补每天都在流失的用户访问流量.而在搜索引擎中,获取流量的方式十分多元,站长想要突破传统获取桎梏 ...

最新文章

  1. CSS三角形如何工作?
  2. CNN----卷积为何能提取图像特征
  3. android tabhost --android UI 学习
  4. 【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 )
  5. 复习JavaScript随手记
  6. 以下不属于计算机安全术语,基础知识(D).doc
  7. Google强化学习框架SEED RL环境部署
  8. C/C++ realloc()函数解析
  9. JEECG社区第六期架构培训班报名
  10. jquery-显示隐藏-链式调用
  11. Java浅克隆和深克隆
  12. 闭包造成的内存泄露怎么解决?
  13. Mybatis学习笔记-CURD(基于配置文件的方式)
  14. Lua开发工作笔记0003---Windows下搭建Lua开发环境
  15. EIP-1559性能测试:22小时共处理6426个区块,平均每个区块4100万Gas
  16. 20200221_2_国家非文化遗产爬虫代码
  17. MySQL-快速入门(2)数据类型
  18. qemu 搭建 ARM Linux环境
  19. 在GPU上运行MATLAB程序
  20. torch.bernoulli 的使用方法(附代码示例)

热门文章

  1. 总结xml,适合初学者
  2. nexus+7+android+5.0++wifi+代理,二代Nexus 7获Android 5.0.2系统更新
  3. 基于java的围棋游戏设计
  4. DBMS_REDEFINITION 实现对原表进行分区
  5. WordPress:自定义头像
  6. php更换wordpress用户头像,WordPress如何添加用户自定义上传头像功能
  7. win10 系统安装 问题 -- 找不到签名的设备驱动程序-- (记录)
  8. 大数据分析师 - 技术体系 - 了解篇
  9. day15_雷神_前端03
  10. java日志框架之JCL和SLF4J