Referer请求头的一部分,表示一个来源。
比如在www.google.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=http://www.google.com
Referer 的正确英语拼法是referrer 。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。其它网络技术的规范企图修正此问题,使用正确拼法,所以目前拼法不统一。还有它第一个字母是大写。
◆◆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股上市公司信息
发现上市公司条目在class为table-responsive sse_table_T01 tdclickable的div下的table中
查看网页源码,发现该div为空,我们用普通的爬取方法是获取不到数据的
这是因为这个网页是使用了AJAX技术的动态网页。它可以通过与服务器进行少量数据交换而在不重新加载整个网页的情况下对部分网页进行异步更新。
分析请求数据的URL
打开开发者工具,选Network进行JS分析,点击清除,更方便定位
点击网页中上市A股,进行加载刷新
出现了一个条目,就是我们要找的数据的url,(有的网站会出现一堆的js条目,就需要去分析一下了)
浏览器里打开目标验证一下有没有我们需要的数据
403码表示我们没有权限浏览目标地址。这是网站的自我保护行为。
JSON数据的获取
思路:修改Request-Headers中Cookie,User-Agent,Referer等信息,让爬虫模拟人的操作
需要修改的内容可以在Headers中查看:
代码实现
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)