Referer

一、referer是什么:

  • 图片防盗链的技术应该还有其他的,目前了解到的是浏览器的referer,其实这是错误的拼写,正确是应该是referrer。不过现在可以看到Chrome的开发者工具里,还是显示的是前者,拼写不重要,重要的是理解它的含义。

  • 简单来讲,referer的作用就是记录你在访问一个目标网站时,在访问前你的原网站的地址,

    比如用Chrome从知乎的某个板块到另外一个,那么你在的这个网站就是原网站,按F12,选中Network选项,从页面内进入一个网站,可以从这个网站的header即头信息中,看到referer就是原来的那个网站。

  • 但是!!!!!!!!从头信息中可以看到Referer-policy的字样,它的规则是:点我,查看referer-policy的详细规则。

  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy

  • 一般网站的policy都是 no-referrer-when-downgrade,它的演示在上述网站里很清晰了,这里不再赘述。

  • 这里要注意的是,由于Chrome默认是打开网页时,原地打开,也就是不弹出新窗口,这样才可以用F12监控referer,比如qq浏览器,打开网页是跳出,也不能看到referer的(这里也许是我自己不懂怎么看,如果可以的话,烦请评论告知。)

  • 注:想要Chrome不原地打开,也就是打开新窗口的方法是win10下, ctrl+鼠标左键点击网页。

二、无referer

  • 很简单,根据referer的作用可以知道,把网页地址复制到浏览器新页面的地址栏里,进行直接访问,这样的话就不会有referer,同样地,浏览器刷新也不会有referer。这里牵涉到python爬虫中防盗链的问题。

三、referer的作用

  • 由于referer是请求网页中,也就是发起HTTP请求中header的一部分,所以可以用来做网页的图片防盗链!
  • 比如一个网页的图,想用python下载到自己的电脑里,用urllib.request或者requests第三方库访问图片时,爬不下来。
  • 这是因为python提交request申请的时候,就类似于在浏览器中的空地址栏里键入这个网页然后访问,根据上面说的,无referer,这时网站的设置比如是要求有referer,且referer的网站必须是你进来之前的网站,也就是这个图片的主页。

四、破解referer反爬虫的办法

方法很简单! 既然要求你传入图片主页面的referer,在构造header的时候,传入Referer参数(注意R要大写),它的值为与这个图片链接相关的网站,或者这个图片链接地址的原网站就可以了,听起来很生涩,下面上代码。

from fake_useragent import UserAgent
#fake_useragent的介绍见我另一篇博文
#伪装成浏览器
ua = UserAgent()
headers = {'User-Agent':ua.random} #一般网站伪装成这样也就够了,但是如果想爬图片,图片反盗链的话。如下 #其实很好理解,就是告诉你要下载的那个图片页面,我是从主页面来的,现在把数据给我。
headers = {'User-Agent':ua.random,'Referer':'这里放入图片的主页面'}
#然后在后续requests中传入header即可

案例:

import requests

# https://movie.douban.com/explore

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'Referer': 'https://movie.douban.com/explore',
}
url = 'https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=20&selected_categories=%7B%7D&uncollect=false&tags='
res = requests.get(url, headers=headers)
print(res.json())
items = res.json()['items']
for m in items:
print(m.get('title'))

五、一些说明

  • 当然了,不是所有网站都有图片防盗链的,所以很多时候大可不必这么复杂,普通的图片爬取下载推荐用request 模块来做,这样代码结构简单易懂,逻辑更清晰。
  • 如果遇到防盗链的图片,一般思路就是先爬到所有图片的地址.jpg —–>将它们储存在列表中 —–>遍历访问图片地址,然后用 ‘wb’的格式打开文件写入,文件名根据图片地址动态改变。

六、爬虫之UserAgent的获得方法

1.页面地址栏

  • 直接在页面的地址栏里键入about:version,进去页面后,用户代理后面就是UserAgent

2.在网页界面

  • 按F12——>选中Network——>此时刷新网页——>然后在Network下面的All里找到当前网页的地址——>选中Headers——>拉到下面可以看到User-Agent

3.代码获取

  • 在cmd命令行里用pip安装fake_useragent,代码如下,复制到命令行里安装。

    #导入模块
    pip install fake_useragent #代码加载随机UA
    from fake_useragent import UserAgent
    import random fake_ua=UserAgent() # 构建UserAgent()对象
    headers = {'User-Agent':fake_ua.random} #用random来随机取得用户代理。 #运行效果
    print(headers)
    #{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.0 Safari/530.5'}
    #{'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr-fr) AppleWebKit/525.1+ (KHTML, like Gecko) Version/3.0.4 Safari/523.10'}

4.浏览器直接搜索

  • 网上的各种UA版本都有,随便粘一个。

七、实战案例:下载电影封面

  • 代码

    import random
    import time
    import requests # https://movie.douban.com/explore headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
    'Referer': 'https://movie.douban.com/explore',
    }
    url = 'https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=20&selected_categories=%7B%7D&uncollect=false&tags=&ck=DvZ3'
    res = requests.get(url, headers=headers)
    items = res.json()['items'] # 循环获取下载
    i = 0
    for m in items:
    title = m["title"]
    # 进行图片的下载
    res = requests.get(m['pic']['large'], headers=headers)
    with open(f'./imgs/{title}.jpg', 'wb') as f:
    f.write(res.content)
    print(title, '下载完成!')
    # 给一个自省时间 防止给服务器造成太大的压力 避免服务器崩溃或者当前被封
    time.sleep(random.randint(1, 4))
    i += 1

Day 13 13.1 refer反爬的更多相关文章

  1. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  2. python高级—— 从趟过的坑中聊聊爬虫、反爬以及、反反爬,附送一套高级爬虫试题

    前言: 时隔数月,我终于又更新博客了,然而,在这期间的粉丝数也就跟着我停更博客而涨停了,唉 是的,我改了博客名,不知道为什么要改,就感觉现在这个名字看起来要洋气一点. 那么最近到底咋不更新博客了呢?说 ...

  3. python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制

    CrawlSpider实现的全站数据的爬取 新建一个工程 cd 工程 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com 连接提取器Link ...

  4. python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用

    站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...

  5. 【Python3爬虫】反反爬之破解同程旅游加密参数 antitoken

    一.前言简介 在现在各个网站使用的反爬措施中,使用 JavaScript 加密算是很常用的了,通常会使用 JavaScript 加密某个参数,例如 token 或者 sign.在这次的例子中,就采取了 ...

  6. python 爬虫 汽车之家车辆参数反爬

    水平有限,仅供参考. 如图所示,汽车之家的车辆详情里的数据做了反爬对策,数据被CSS伪类替换. 观察 Sources 发现数据就在当前页面. 发现若干条进行CSS替换的js 继续深入此JS 知道了数据 ...

  7. 爬虫入门到放弃系列07:js混淆、eval加密、字体加密三大反爬技术

    前言 如果再说IP请求次数检测.验证码这种最常见的反爬虫技术,可能大家听得耳朵都出茧子了.当然,也有的同学写了了几天的爬虫,觉得爬虫太简单.没有啥挑战性.所以特地找了三个有一定难度的网站,希望可以有兴 ...

  8. python爬取实习僧招聘信息字体反爬

    参考博客:http://www.cnblogs.com/eastonliu/p/9925652.html 实习僧招聘的网站采用了字体反爬,在页面上显示正常,查看源码关键信息乱码,如下图所示: 查看网页 ...

  9. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...

  10. Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二

    说说这个网站 汽车之家,反爬神一般的存在,字体反爬的鼻祖网站,这个网站的开发团队,一定擅长前端吧,2019年4月19日开始写这篇博客,不保证这个代码可以存活到月底,希望后来爬虫coder,继续和汽车之 ...

随机推荐

  1. 【机器学习】李宏毅——Anomaly Detection(异常检测)

    异常检测概述 首先要明确一下什么是异常检测任务.对于异常检测任务来说,我们希望能够通过现有的样本来训练一个架构,它能够根据输入与现有样本之间是否足够相似,来告诉我们这个输入是否是异常的,例如下图: 那 ...

  2. python画社交网络图

    安装依赖包 pip3 install networkx 在图书馆的检索系统中,关于图书的信息里面有一个是图书相关借阅关系图.跟这个社交网络图是一样的,反映了不同对象间的关联性.利用python画社交网 ...

  3. 3、mysql着重号解决关键字冲突

    1.着重号(`  `): 使用着重号(` `)将字段名或表名括起来解决冲突:保证表中的字段.表名等没有和保留字.数据库系统名或常用方法名冲突

  4. UOJ33 [UR#2] 树上 GCD

    UOJ33 [UR#2] 树上 GCD 简要题意: 给定一棵有根树,对于每个 \(i \in [1,n)\),求出下式的值: \[Ans[i] = \sum_{u<v} \gcd({\rm{di ...

  5. 第k个数【模板题】

    第k个数 给定一个长度为 \(n\) 的整数数列,以及一个整数 \(k\),请用快速选择算法求出数列从小到大排序后的第 \(k\) 个数. 输入格式 第一行包含两个整数 \(n\) 和 \(k\). ...

  6. 【问题解决】Tomcat启动服务时提示Filter初始化或销毁出现java.lang.AbstractMethodError错误

    问题背景 最近在开发项目接口,基于SpringBoot 2.6.8,最终部署到外置Tomcat 8.5.85 下,开发过程中写了一个CookieFilter,实现javax.servlet.Filte ...

  7. Python面向对象(上)

    Python面向对象(上) python是一门面向对象的编程语言.何为对象?对象是类的实例.在生活中,任何一个事物都是一个对象,如牡丹花.牡丹花的类是花类,同样属于花类的还有荷花.月季花.金银花.菊花 ...

  8. file过滤器的原理和使用-FileNameFilter过滤器的使用和lambda优化程序

    file过滤器的原理和使用 java.io.FileFilter是一个接口,是File的过滤器.该接口的对象可以传递给File类的listFiles(FileFilter)作为参数,接口中只有一个方法 ...

  9. 2023计算机领域顶会(A类)以及ACL 2023自然语言处理(NLP)研究子方向领域汇总

    2023年的计算语言学协会年会(ACL 2023)共包含26个领域,代表着当前前计算语言学和自然语言处理研究的不同方面.每个领域都有一组相关联的关键字来描述其潜在的子领域, 这些子领域并非排他性的,它 ...

  10. JSP第十一次作业

    1.第十二周上机作业(邮件功能)的控制层代码改用为servlet实现.2.学习通发布了考试,截止到本周六.  com.gd.dao  BaseDao 1 package com.gd.dao; 2 3 ...