目录
1. 爬虫、反爬虫与反反爬虫
- 爬虫
自动获取网页信息的程序。
- 反爬虫
阻止爬虫程序获取网页信息的程序。
- 反反爬虫
应对反爬虫程序,爬取网页信息的程序。
其中,爬虫和反反爬虫是用户的行为;反爬虫是服务器的行为。
2.常见的反爬虫技术
主要包括以下四种:
1)Headers校验
2)动态页面
3)IP限制
4)验证码
- Headers校验
HTTP的请求头(headers)是指每次向网络服务器发送请求时传递的一组属性和配置信息。
HTTP定义了十多种请求头类型,但只有几个字段比较常用。对 HTTP 请求头的每个属性进行“是否具有人性”的检查,就是为了阻挡爬虫程序。
请求头可以通过requests模块进行自定义。
实例:
下面程序可用于显示浏览器访问请求头信息。https://www.whatismy browser.com/ 可以获取本机配置信息。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
headers = {"User-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Accept": "text/html, application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}
url = "https://www.whatismybrowser.com/developers/what-http-headers-is-my-browser-sending"
req = session.get(url, headers=headers)
bsObj = BeautifulSoup(req.text, features="lxml")
print(bsObj.find("table", {"class": "table-striped"}).get_text)
通常headers中最重要的参数之一是 User-Agent。无论做什么项目,一定要记得把 User-Agent 属性设置成不容易引起怀疑的内容,不要用Python-urllib/3.4之类的。(浏览器的User-Agent属性值,可以在Chrome浏览器中任意打开一个网页,右键点击检查,在Network选项卡中,任意打开一个请求,就可以得到这个属性值,以后在程序中使用时,直接copy。)
另外,如果你正在处理一个警觉性非常高的网站,就要注意那些经常用却很少检查的请求头,比如 Accept-Language 属性,也许它正是那个网站判断你是否为人类访问者的关键。(Headers中的各种属性值,都可以在上图中找到。)
1)User-Agent
User Agent,中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
在网络请求当中,User-Agent 是标明身份的一种标识。网站通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装UA 可以绕过检测。
UA反爬虫:是一种黑名单策略,只要出现在黑名单中的请求,都视为爬虫,对于此类请求将不予处理或返回错误提示。
绕过 UA反爬虫:将爬虫程序中请求头的 User-Agent 的值改为浏览器的User-Agent ,这样就能够欺骗服务器,达到绕过反爬虫的目的。
2)referer
Referer是HTTP协议中的一个请求报头,用于告知服务器,用户的来源页面。如果从一个网页跳转到另一个网页,http 请求头里会带有Referer参数。
Referer主要用于统计,像CNZZ、百度统计等可以通过Referer统计访问流量的来源和搜索的关键词(包含在URL中)等等,方便站长们有针性对的进行推广和SEO。另一个用处是防盗链。
盗链:是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或者提供很少的资源,而真正的服务提供商却得不到任何的利益。
Referer防盗链:服务器通过检测 Referer 是否来自指定域名,从其他非服务提供者指定的HTTP请求得不到正常结果。主要用于图片、视频和网盘服务器。
绕过referer防盗链:修改请求头中 Referer值。
实例:
下载天涯社区某页面的一张图片:http://bbs.tianya.cn/post-ehomephot-50239-1.shtml
import req