爬虫进阶:反反爬虫技术--1User-Agent伪装,构造合理的 HTTP 请求头

1. 构造合理的 HTTP 请求头
除了处理网站表单,requests 模块还是一个设置请求头的利器。HTTP 的请求头是在你每次向网络服务器发送请求时,传递的一组属性和配置信息。HTTP 定义了十几种古怪的请求头类型,不过大多数都不常用。只有下面的七个字段被大多数浏览器用来初始化所有网络请求(表中信息是我自己浏览器的数据)
爬虫进阶:反反爬虫技术--1User-Agent伪装,构造合理的 HTTP 请求头_第1张图片
请求头可以通过 requests 模块进行自定义。https://www.whatismybrowser.com/ 网站就是一个非常棒的网站,可以让服务器测试浏览器的属性。我们用下面的程序来采集这个网站的信息,验证我们浏览器的 cookie 设置:

爬虫进阶:反反爬虫技术--1User-Agent伪装,构造合理的 HTTP 请求头_第2张图片
以request包为例:

在这里可以使用user_agents.txt中的任意一个user-agent来达到模拟访问的效果,另外也可以建立一个useragent池
比如百度页面,下拉的时候通过浏览器自带的network可以看到有个useragent
爬虫进阶:反反爬虫技术--1User-Agent伪装,构造合理的 HTTP 请求头_第3张图片
通过agent池的方式的例子:

def get_agent():   
	#模拟header的user-agent字段,返回一个随机的user-agent字典类型的键值对
    agents = ['Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
              'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
              'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)']
    fakeheader = {}
    fakeheader['User-agent'] = agents[random.randint(0, len(agents))]
    return fakeheader    
    # 注意看新的请求函数:    
    def get_html(url):
    try:
        r = requests.get(url, timeout=30,headers=get_agent())
        r.raise_for_status
        r.encoding = r.apparent_encoding
        return r.status_code    
    except:
        return "Someting Wrong!"  

你可能感兴趣的:(爬虫)