获取referer_一分钟解读,爬虫中HTTP请求头中Referer的含义和作用

Referer请求头的一部分,表示一个来源。

比如在www.google.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=http://www.google.com

Referer 的正确英语拼法是referrer 。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。其它网络技术的规范企图修正此问题,使用正确拼法,所以目前拼法不统一。还有它第一个字母是大写。

3dc30973e1bc96bd43304a712d16ff6f.png

◆◆Referer的作用:

◆◆

1.防盗链。

比如我只允许我自己的网站访问自己的图片服务器,假设域名是www.haibao.com,那么图片服务器每次取到Referer来判断一下域名是不是www.haibao.com,如果是就继续访问,不是就拦截。

2.防止恶意请求。

比如静态请求是*.html结尾的,动态请求是*.shtml,那么由此可以这么用,所有的*.shtml请求,必须 Referer 为我自己的网站。

一个 HTTP 请求中可能不包含 Referer 或者Referer内容为空,意味着允许直接在浏览器的地址栏中输入一个资源的URL地址直接访问。

◆◆案例:获取A股上市公司信息

◆◆

需求

爬取上海证券交易所网站,获取A股上市公司信息,包括公司代码,公司简称,A股代码,A股简称以及A股总资本和A股流通资本这几项

审查元素

打开http://www.sse.com.cn/assortment/stock/list/share/

查看A股上市公司信息

150c4e2ac33a2cb28361dbad416d9e7a.png

发现上市公司条目在class为table-responsive sse_table_T01 tdclickable的div下的table中

查看网页源码,发现该div为空,我们用普通的爬取方法是获取不到数据的

ee49005f848216ae4b271993d6179d0b.png

这是因为这个网页是使用了AJAX技术的动态网页。它可以通过与服务器进行少量数据交换而在不重新加载整个网页的情况下对部分网页进行异步更新。

分析请求数据的URL

打开开发者工具,选Network进行JS分析,点击清除,更方便定位

47526c348a4a34043715fe41e5663f8e.png

点击网页中上市A股,进行加载刷新

abceb09399fe350a705d3365b57d54b1.png

出现了一个条目,就是我们要找的数据的url,(有的网站会出现一堆的js条目,就需要去分析一下了)

fd42f2063374737dfbeface9f00960b0.png

浏览器里打开目标验证一下有没有我们需要的数据

0065f8ba459979bd0bb0e3c201001e4e.png

403码表示我们没有权限浏览目标地址。这是网站的自我保护行为。

JSON数据的获取

思路:修改Request-Headers中Cookie,User-Agent,Referer等信息,让爬虫模拟人的操作

需要修改的内容可以在Headers中查看:

601a4d70f44e7590ab4078c094dc7a20.png

代码实现

import requestsurl='http://query.sse.com.cn/security/stock/getStockListData2.do?&jsonCallBack=jsonpCallback81793&isPagination=true&stockCode=&csrcCode=&areaName=&stockType=1&pageHelp.cacheSize=1&pageHelp.beginPage=1&pageHelp.pageSize=25&pageHelp.pageNo=1&_=1531271694633'headers = { 'User-Agent': 'Mozilla/5.0 (compatible; WOW64; MSIE 10.0; Windows NT 6.2)', 'Referer': 'http://www.sse.com.cn/assortment/stock/list/share/',}response=requests.get(url,headers=headers) print(response.text)
好的,您的问题是如何获取referer的请求参数,以及如何通过request获取referer请求头实现防盗链。 首先,refererHTTP请求头中的一个字段,用于表示当前请求是从哪个页面发起的。如果当前请求是从某个页面跳转过来的,则referer会包含跳转页面的URL,如果没有则为null。 如果您想要获取referer的请求参数,可以使用Java的URL类来解析referer的URL,然后通过其getQuery方法获取请求参数。以下是一个简单的示例代码: ```java String referer = request.getHeader("referer"); if (referer != null) { URL url = new URL(referer); String query = url.getQuery(); // 处理请求参数 } ``` 另外,您提到了防盗链的问题。防盗链是指通过某些手段,禁止其他网站直接链接到您的资源,以保护资源的安全和版权。其一种常见的防盗链方式就是通过判断referer请求头来实现。 具体实现方式是在服务器端判断referer请求头的URL是否属于当前网站的域名范围内,如果不属于则返回错误信息。 以下是一个简单的示例代码: ```java String referer = request.getHeader("referer"); if (referer != null && !referer.startsWith("http://www.yourdomain.com")) { // 不允许访问 response.setStatus(403); return; } // 允许访问 ``` 注意,这种方式虽然可以简单地防止盗链,但是referer请求头是可以伪造的,因此并不是绝对可靠的防盗链方式。需要根据具体情况进行综合考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值