如何阻止图像被 file_get_contents 或 wget 抓取,以及如何应对?
How to block images from being scraped by file_get_contents or wget, and how to counter it?
我的客户在新浪博客上写博客,她只对新浪博客的编辑感到满意。因此,在她提交博客后,我使用一个小片段将图像和文本抓取到她自己的博客网站上。它的核心是
$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
它也只能得到空白图像。
只是一个建议 - 网站检测爬虫的最简单(也是最可能)的方法是查看请求 headers,最常见的是 "Accept","Referrer" 和 "User-Agent"。您可以尝试复制 "real" 浏览器发送的值并将它们插入 wget 调用,如下所示:
- 将浏览器指向 https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending 并复制 User-Agent 字符串并接受 headers
- 按照此处所述将这些值插入 wget:Change the default USER-AGENT and REFERRER value in 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
它也只能得到空白图像。
只是一个建议 - 网站检测爬虫的最简单(也是最可能)的方法是查看请求 headers,最常见的是 "Accept","Referrer" 和 "User-Agent"。您可以尝试复制 "real" 浏览器发送的值并将它们插入 wget 调用,如下所示:
- 将浏览器指向 https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending 并复制 User-Agent 字符串并接受 headers
- 按照此处所述将这些值插入 wget:Change the default USER-AGENT and REFERRER value in wget
希望对您有所帮助!