image-processing - 如何阻止图像被 file_get_contents 或 wget 抓取,以及如何应对?
问题描述
我的客户正在新浪博客上写博客,她只对它的编辑感到满意。因此,在她提交博客后,我使用一个小片段将图像和文本抓取到她自己的博客网站。它的核心是
$url = 'http://s5.sinaimg.cn/bmiddle/001MEJWgzy7xxRaXmDyd4&690';
$img_data = @file_get_contents($url);
$img = file_put_contents('1.jpg',$img_data);
听起来很奇怪,但它确实运作良好,为我们俩节省了大量时间。但是最近图像变成了空白,带有一些水印。我猜新浪终于发现了我们的小伎俩并阻止了图像被抓取。我只是好奇阻止是如何进行的,更重要的是,有没有办法解决?我试过用wget http://s5.sinaimg.cn/bmiddle/001MEJWgzy7xxRaXmDyd4&690
它也只能得到空白图像。
解决方案
只是一个建议——站点检测爬虫的最简单(也是最有可能)的方法是查看请求标头,最常见的是“Accept”、“Referrer”和“User-Agent”。您可以尝试复制“真实”浏览器发送的值并将它们插入 wget 调用,如下所示:
- 将浏览器指向https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending并复制 User-Agent 字符串和 Accept 标头
- 将这些值插入 wget,如下所述:Change the default USER-AGENT and REFERRER value in wget
希望有帮助!
推荐阅读
- swift - Swift:启用切片时 UIImage 的大小
- gradle - 是否有用于 jenkins 管道代码的 CPS 静态分析检查器
- javascript - 过滤然后按日期排序对象数组
- python - virtualenv 中的 Lib 文件夹 - locale.py 在哪里
- spring-boot - 如何记录通过 @RestController 运行的 http 请求?
- excel - Excel - 如何拖动填充:在公式中只增加一个值?
- javascript - 在我从 Ternary 调用它以呈现 html 之前停止函数触发
- amazon-web-services - AWS SCT 如何以及有什么用处?
- mysql - MySQL-从数据库中提取一个数字并在同一个查询中使用它
- reactjs - 如何使用事件处理程序一次或多次渲染相同的组件