爬蟲學習筆記:創建隨機User-Agent池


一、背景介紹

User-Agent 即用戶代理,簡稱 UA

它是一個特殊字符串,使得服務器能夠識別客戶使用的操作系統及版本、CPU類型、瀏覽器版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

具備反爬措施的網站,通過判斷 UA 的合理性,來響應請求,判斷請求是否合法。

UA 的標准格式為:

瀏覽器標識(操作系統標識;加密等級標識;瀏覽器語言)渲染引擎標識 版本信息
# Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)
# Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0
  • Mozilla/5.0 -- 網景公司瀏覽器的標識,由於互聯網初期瀏覽器市場主要被網景公司占領,很多服務器被設置成僅響應含有標志為 Mozilla 的瀏覽器的請求,因此,新款的瀏覽器為了打入市場,不得不加上這個字段。
  • Windows NT 5.1 -- Windows XP 的標識符
  • WOW64 -- 32位系統運行在64位處理器上
  • AppleWebKit/535.11 -- 蘋果公司開發的渲染引擎
  • KHTML -- Linux 平台中 Konqueror 瀏覽器的呈現引擎 KHTML
  • Gechko -- 呈現引擎
  • like Gechko -- 表示其行為與 Gechko 瀏覽器引擎類似

二、User-Agent池

繞過反爬的有效方法是利用 User-Agent 池隨機生成 UA

1.方法一

# 構造隨機函數
def get_ua():
    import random
    user_agents = [
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',
		'Opera/8.0 (Windows NT 5.1; U; en)',
		'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
		'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50',
		'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
		'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10',
		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 ',
		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
		'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
		'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',
		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
		'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11',
		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
		'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
		'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
		'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) ',
    ]
    user_agent = random.choice(user_agents) # 隨機抽取對象
    return user_agent

# 調用
get_ua()

2.方法二

# 構造隨機函數
def get_ua():
    import random
    first_num = random.randint(55, 76)
    third_num = random.randint(0, 3800)
    fourth_num = random.randint(0, 140)
    os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)', '(Macintosh; Intel Mac OS X 10_14_5)']
    chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)
    ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36', '(KHTML, like Gecko)', chrome_version, 'Safari/537.36'])
    return ua

# 調用
get_ua()

3.實操

import requests

def get_page(url):
    ua = get_ua()
    headers = {'User-Agent': ua}
    response = requests.get(url=url, headers=headers)
    print(response.text)

if __name__ == '__main__':
    get_page('https://www.baidu.com')

參考鏈接:創建一個UA池(User-Agent)

參考鏈接:Python反爬手段之User-Agent池


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM