php网页抓取图片(这是headers系列第二篇,第一篇在这里Headers之User-Agent设置)

优采云 发布时间: 2021-10-04 12:15

  php网页抓取图片(这是headers系列第二篇,第一篇在这里Headers之User-Agent设置)

  这是headers系列的第二篇,关于Headers的User-Agent设置第一篇就到这里了

  本文分为以下几个部分

  标题中的引用指示您来自哪个页面。比如我们上面点击了这个页面,后面的headers里面的referer就是上一个页面。

  

  如果我们在浏览器中直接输入后面的URL进行请求,referer就没了,因为我们没有从其他页面找到

  

  有些网站会根据referer反爬。

  第一个例子,网站的这个*敏*感*词*

  我们要下载这个网站的这个gif*敏*感*词*。

  首先也是最容易提出要求

  r = requests.get('http://upfile2.asqql.com/upfile/2009pasdfasdfic2009s305985-ts/gif_spic/2018-3/201832919504314405.gif')

r.status_code

# 404

  现在我们加入referer来请求

  headers = {'referer': 'http://www.asqql.com/'}

r = requests.get('http://upfile2.asqql.com/upfile/2009pasdfasdfic2009s305985-ts/gif_spic/2018-3/201832919504314405.gif',

headers = headers)

with open('e.gif', 'wb') as f:

f.write(r.content)

  我们得到了正确的 gif

  

  事实上,可以通过使用cookies而不是referers来正确获取。如果直接复制链接到浏览器打开,此时是没有referer的,因为你没有从其他页面点击进去,但是这个时候还是可以看到下载这个*敏*感*词*图片的,因为用浏览器打开会自动带cookie。

  第二个例子:再次在网上拍照

  下面是一个图片网站的例子。下载本网站中的图片,可以使用网站首页的referer,也可以不使用referer,但不能是其他网站 Referer。

  下载网站的这张照片。如果您将此链接直接复制到浏览器中,则可以访问此图片。查看headers,发现没有referer,说明这张图片没有referer也可以正常下载。

  直接请求下载这张图片的代码如下

  import requests

r = requests.get('http://photo.yupoo.com/vibius/GkRSowXr/medish.jpg')

r.status_code

# 200

with open('a.jpg', 'wb') as f:

f.write(r.content)

  获取图片如下

  

  现在我们修改headers中的referer,改成知乎的首页,就会发现我们想要的图片无法抓取

  import requests

headers = {'referer': 'https://www.zhihu.com/'}

r = requests.get('http://photo.yupoo.com/vibius/GkRSowXr/medish.jpg', headers = headers)

with open('b.jpg', 'wb') as f:

f.write(r.content)

  这将得到以下图片

  

  上面的请求过程意味着我们点击了一个链接从知乎网站获取这张图片,yupoo网站认为这种方式可以访问是不合理的,只有这个可从 yupoo 主页找到。图片是真实用户所做的

  import requests

headers = {'referer': 'http://photo.yupoo.com/'}

r = requests.get('http://photo.yupoo.com/vibius/GkRSowXr/medish.jpg', headers = headers)

with open('c.jpg', 'wb') as f:

f.write(r.content)

  

  使用yupoo的主页作为referer可以正常获取图片。

  在上面的情况下,不知道有referer也没关系,但是还是有一定的局限性。

  热链接说明

  盗链是指服务商不提供服务的内容,通过技术手段(可以理解为爬虫)获取其他网站资源展示在自己的网站上。常见的盗链类型有:图片盗链、音频盗链、视频盗链、文件盗链。

  网站被盗链接会消耗被盗链接的大量带宽网站,实际点击率可能很小,严重损害了被盗链接的利益网站 .

  被盗网站自然会阻止盗链。可以经常更改图片的名称,也可以查看referer。因为普通用户必须点击自己网站的链接才能访问图片,如果请求的referer是另一个网站,就说明是爬虫。

  盗链网站也会进行针对性的反盗链。您可以通过在请求的标头中设置引用来绕过反盗链。我们现在正在使用爬虫来抓取其他人的网站。

  何时使用引用

  在抓取图片、视频等网站时,多注意是否是因为没有添加referer。上面的抓图和gif*敏*感*词*就是一个例子。网上还有其他文章需要设置referer,如下

  网络安全问题

  在这个文章中可以看到CSRF网络攻击,可以通过设置referer来避免。

  但是,使用referer也可能会导致一些不好的结果。例如,如果您单击一个链接,则请求此链接时的引用者是您当前的 URL。如果你的 URL 携带了一些隐私信息,那么你的信息就会暴露给访问过的链接。这种情况的详情请参考这个文章

  栏目信息

  专栏首页:python编程

  栏目目录:目录

  履带目录:履带系列目录

  版本说明:软件和软件包版本说明

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线