最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬蟲(chóng)和反爬技術(shù)過(guò)程詳解

 更新時(shí)間:2021年09月01日 15:22:38   作者:二哥不像程序員  
Python爬蟲(chóng)是當(dāng)下最火的一種獲取數(shù)據(jù)的方式,當(dāng)我們對(duì)一些小型網(wǎng)站進(jìn)行爬取的時(shí)候往往沒(méi)什么阻礙,而當(dāng)我們爬取大型網(wǎng)站的時(shí)候經(jīng)常會(huì)遇到禁止訪問(wèn)、封禁IP的情況,這也是我們觸發(fā)反爬機(jī)制的體現(xiàn),本文來(lái)帶領(lǐng)大家了解幾種簡(jiǎn)單高效的反爬對(duì)策

一、瀏覽器模擬(Headers)

瀏覽器模擬是最常用的一種反爬方式。設(shè)想一下:一個(gè)網(wǎng)站不停的被同一個(gè)版本的瀏覽器頻率的訪問(wèn),那大概了就要被認(rèn)為是機(jī)器人了。所以上有政策下有對(duì)策,我們每次訪問(wèn)都使用不同的瀏覽器版本信息不就可以了嗎。首先我們來(lái)看一下如何找到自己瀏覽器信息。

如何找到瀏覽器信息

打開(kāi)瀏覽器,按F12(或者鼠標(biāo)右鍵+檢查)

點(diǎn)擊如下圖所示的Network按鈕

按鍵盤(pán)Ctrl+R(MAC:Command+R)進(jìn)行抓包

操作完上一步之后,隨便點(diǎn)擊右側(cè)name中的一項(xiàng),即可出現(xiàn)下面的頁(yè)面,紅框中的內(nèi)容就是我們要找的瀏覽器信息了。

備注:有一些網(wǎng)站會(huì)帶有Referer信息,這里的作用主要是在于告訴瀏覽器你是從哪個(gè)網(wǎng)址跳轉(zhuǎn)過(guò)來(lái)的,類(lèi)似于P站這種站點(diǎn)就會(huì)進(jìn)行相應(yīng)的檢查,所以我們可以通過(guò)上述同樣的方式找到瀏覽器的Referer信息。如下圖紅框所示:

通過(guò)上面的步驟,我們就能夠成功的得到瀏覽器的版本信息了,如果能夠獲得不同的版本信息我們就能夠模擬不同的瀏覽器進(jìn)行操作了。

在Python中使用user-agent的方式如下:

headers = {
  			'Referer': '具體的Referer',
            'User-Agent': '具體的user-agent'
    }
requests.get(url,headers=headers)

常用的請(qǐng)求頭(模擬瀏覽器)信息如下:

User_Agent = [
    "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_2 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5",
    "MQQBrowser/25 (Linux; U; 2.3.3; zh-cn; HTC Desire S Build/GRI40;480*800)",
    "Mozilla/5.0 (Linux; U; Android 2.3.3; zh-cn; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaE75-1 /110.48.125 Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413",
    "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8J2",
    "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A5313e Safari/7534.48.3",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A5313e Safari/7534.48.3",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A5313e Safari/7534.48.3",
    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA7)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7)",
    "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30",
    "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)",
    "Mozilla/4.0 (compatible; MSIE 60; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
    "Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.9.168 Version/11.50",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)",
    "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
    "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",
    "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",
    "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",
    "Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00",
    "Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00",
    "Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00",
    "Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
    "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0",
    "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0",
    "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0",
    "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0",
    "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101  Firefox/28.0",
    "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3",
    "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",
    "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0"
]

二、IP代理

除了通過(guò)同一個(gè)瀏覽器進(jìn)行訪問(wèn),還可能出現(xiàn)的情況就是通過(guò)同一個(gè)IP不斷的訪問(wèn)網(wǎng)址,這樣很容易造成整個(gè)IP被封,個(gè)人的IP還好,如果一個(gè)公司的IP都不能訪問(wèn)某個(gè)網(wǎng)站,那將會(huì)是怎樣的效果就不用多說(shuō)了吧。

對(duì)于IP來(lái)說(shuō)除了需要控制IP地址的變更之外,還要控制訪問(wèn)速度,畢竟程序快起來(lái)是不眨眼的。

Python使用IP代理的方式如下:

import requests
proxies = {"http": 'IP地址'}
requests.get(url, headers=headers, proxies=proxies)

注:關(guān)于代理IP去哪找的問(wèn)題,網(wǎng)上一搜一大把,我們放心大膽的使用就可以了。

控制訪問(wèn)頻率使用time模塊即可:

import time
time.sleep(5)

三、Cookies模擬

有很多時(shí)候我們?cè)L問(wèn)網(wǎng)址會(huì)遇到403錯(cuò)誤,一般這種情況表示無(wú)權(quán)訪問(wèn)請(qǐng)求的資源,通常在沒(méi)有設(shè)置cookie或是沒(méi)有設(shè)置正確的cookie會(huì)導(dǎo)致這個(gè)錯(cuò)誤。cookie的存在就像是一個(gè)網(wǎng)址的通行證,你會(huì)發(fā)現(xiàn)在你登陸和未登陸網(wǎng)頁(yè)的時(shí)候cookie是會(huì)發(fā)生變化的。

手動(dòng)獲取cookie

我們可以通過(guò)和獲取user-agent一樣的方式來(lái)手動(dòng)獲取cookie:

自動(dòng)獲取cookie

我們使用session方法就能夠?qū)崿F(xiàn)自動(dòng)獲取cookie了

示例代碼如下:

import requests
session = requests.session()
session.cookies = LWPCookieJar(filename='Cookies.txt')
def login():
    name = input("輸入賬戶:")
    password = input("輸入密碼:")
    url = "url"
    data = {
        "ck": "",
        "name": name,
        "password": password,
        "remember": "True",
        "ticket": "",
    }
    response = session.post(url, data=data)
    print(response.text)
    session.cookies.save()  # 保存 cookie

這樣我們的cookie就能夠得以保存了。

使用session加載cookie的方式如下:

session.cookies = LWPCookieJar(filename='Cookies.txt')
session.cookies.load(ignore_discard=True)

使用cookies

當(dāng)我們有了cookies時(shí),使用起來(lái)就簡(jiǎn)單很多了,直接使用和加載user-agent一樣的方式即可。

headers = {
  			'Referer': '具體的Referer',
        'User-Agent': '具體的user-agent',
  			'Cookie': 'cookie'
    }
requests.get(url,headers=headers)

對(duì)于反爬的一些基礎(chǔ)操作就介紹完了更多關(guān)于Python爬蟲(chóng)和反爬技術(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python跳出多重循環(huán)的方法示例

    Python跳出多重循環(huán)的方法示例

    這篇文章主要介紹了Python跳出多重循環(huán)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 如何使用python數(shù)據(jù)處理解決數(shù)據(jù)沖突和樣本的選取

    如何使用python數(shù)據(jù)處理解決數(shù)據(jù)沖突和樣本的選取

    這篇文章主要介紹了如何使用python數(shù)據(jù)處理解決數(shù)據(jù)沖突和樣本的選取,其中主要包括 實(shí)際業(yè)務(wù)數(shù)據(jù)沖突、樣本選取問(wèn)題、數(shù)據(jù)共線性等思路
    2021-08-08
  • python的去重以及數(shù)據(jù)合并的用法說(shuō)明

    python的去重以及數(shù)據(jù)合并的用法說(shuō)明

    這篇文章主要介紹了python的去重以及數(shù)據(jù)合并的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python elasticsearch從創(chuàng)建索引到寫(xiě)入數(shù)據(jù)的全過(guò)程

    python elasticsearch從創(chuàng)建索引到寫(xiě)入數(shù)據(jù)的全過(guò)程

    這篇文章主要介紹了python elasticsearch從創(chuàng)建索引到寫(xiě)入數(shù)據(jù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python繪圖Matplotlib之坐標(biāo)軸及刻度總結(jié)

    Python繪圖Matplotlib之坐標(biāo)軸及刻度總結(jié)

    這篇文章主要介紹了Python繪圖Matplotlib之坐標(biāo)軸及刻度總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python實(shí)現(xiàn)柵欄加解密 支持密鑰加密

    python實(shí)現(xiàn)柵欄加解密 支持密鑰加密

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)柵欄加解密,支持密鑰加密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python基于json文件實(shí)現(xiàn)的gearman任務(wù)自動(dòng)重啟代碼實(shí)例

    python基于json文件實(shí)現(xiàn)的gearman任務(wù)自動(dòng)重啟代碼實(shí)例

    這篇文章主要介紹了python基于json文件實(shí)現(xiàn)的gearman任務(wù)自動(dòng)重啟代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python如何讀取PDF文檔(或TXT)

    Python如何讀取PDF文檔(或TXT)

    這篇文章主要介紹了Python如何讀取PDF文檔(或TXT),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 零基礎(chǔ)使用Python讀寫(xiě)處理Excel表格的方法

    零基礎(chǔ)使用Python讀寫(xiě)處理Excel表格的方法

    這篇文章主要介紹了Python讀寫(xiě)處理Excel表格,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python批量將csv文件轉(zhuǎn)化成xml文件的實(shí)例

    Python批量將csv文件轉(zhuǎn)化成xml文件的實(shí)例

    將 csv 格式轉(zhuǎn)換成xml格式有許多方法,可以用數(shù)據(jù)庫(kù)的方式,也有許多軟件可以將 csv 轉(zhuǎn)換成xml。但是比較麻煩,本文利用 Python 一鍵批量將 csv 文件轉(zhuǎn)化成 xml 文件。
    2021-05-05

最新評(píng)論

长沙市| 得荣县| 安顺市| 天气| 贵州省| 桃江县| 麦盖提县| 昭觉县| 连山| 霍山县| 砚山县| 漳州市| 宁国市| 东方市| 灌南县| 方城县| 土默特左旗| 石柱| 和顺县| 东光县| 柳江县| 交城县| 都匀市| 沁阳市| 密云县| 大兴区| 五大连池市| 常山县| 曲松县| 平顺县| 峨眉山市| 闸北区| 上杭县| 崇仁县| 拉萨市| 延川县| 通渭县| 五原县| 轮台县| 山西省| 衡水市|