0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解常見的反爬蟲的兩種機(jī)制

馬哥Linux運(yùn)維 ? 來源:CSDN ? 作者:DA1YuH ? 2021-07-29 15:58 ? 次閱讀

最近在學(xué)爬蟲時(shí)發(fā)現(xiàn)許多網(wǎng)站都有自己的反爬蟲機(jī)制,這讓我們沒法直接對(duì)想要的數(shù)據(jù)進(jìn)行爬取,于是了解這種反爬蟲機(jī)制就會(huì)幫助我們找到解決方法。

常見的反爬蟲機(jī)制有判別身份和IP限制兩種,下面我們將一一來進(jìn)行介紹。

(一) 判別身份

首先我們看一個(gè)例子,看看到底什么時(shí)候反爬蟲。

我們還是以 豆瓣電影榜top250(https://movie.douban.com/top250) 為例。

import requests

# 豆瓣電影榜top250的網(wǎng)址url = ‘https://movie.douban.com/top250’# 請(qǐng)求與網(wǎng)站的連接res = requests.get(url)# 打印獲取的文本print(res.text)

這是段簡(jiǎn)單的請(qǐng)求與網(wǎng)站連接并打印獲取數(shù)據(jù)的代碼,我們來看看它的運(yùn)行結(jié)果。

c8b2c35a-edfe-11eb-a97a-12bb97331649.png

我們可以發(fā)現(xiàn)我們什么數(shù)據(jù)都沒有獲取到,這就是由于這個(gè)網(wǎng)站有它的身份識(shí)別功能,把我們識(shí)別為了爬蟲,拒絕為我們提供數(shù)據(jù)。不管是瀏覽器還是爬蟲訪問網(wǎng)站時(shí)都會(huì)帶上一些信息用于身份識(shí)別。而這些信息都被存儲(chǔ)在一個(gè)叫請(qǐng)求頭(request headers) 的地方。而這個(gè)請(qǐng)求頭中我們只需要了解其中的一個(gè)叫user-agent(用戶代理) 的就可以了。user-agent里包含了操作系統(tǒng)、瀏覽器類型、版本等信息,通過修改它我們就能成功地偽裝成瀏覽器。

下面我們來看怎么找這個(gè)user-agent吧。

首先得打開瀏覽器,隨便打開一個(gè)網(wǎng)站,再打開開發(fā)者工具。

再點(diǎn)擊network標(biāo)簽,接著點(diǎn)第一個(gè)請(qǐng)求,再找到Request Headers,最后找到user-agent字段。(有時(shí)候可能點(diǎn)擊network標(biāo)簽后是空白的,這時(shí)候刷新下網(wǎng)頁就好啦?。?/p>

找到請(qǐng)求頭后,我們只需要把他放進(jìn)一個(gè)字典里就好啦,具體操作見下面代碼。

import requests

# 復(fù)制剛才獲取得請(qǐng)求頭headers = { ‘user-agent’:‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36’}# 豆瓣電影榜top250的網(wǎng)址url = ‘https://movie.douban.com/top250’# 請(qǐng)求與網(wǎng)站的連接res = requests.get(url, headers=headers)# 打印獲取的文本print(res.text)

現(xiàn)在我們?cè)賮砜床糠州敵鼋Y(jié)果。

c8e9e81c-edfe-11eb-a97a-12bb97331649.png

我們可以發(fā)現(xiàn)已經(jīng)將該網(wǎng)站的HTML文件全部爬取到了,至此第一種方法就將完成了。下面我們來看第二種方法。

(二) IP限制

IP(Internet Protocol) 全稱互聯(lián)網(wǎng)協(xié)議地址,意思是分配給用戶上網(wǎng)使用的網(wǎng)際協(xié)議的設(shè)備的數(shù)字標(biāo)簽。它就像我們身份證號(hào)一樣,只要知道你的身份證號(hào)就能查出你是哪個(gè)人。

當(dāng)我們爬取大量數(shù)據(jù)時(shí),如果我們不加以節(jié)制地訪問目標(biāo)網(wǎng)站,會(huì)使網(wǎng)站超負(fù)荷運(yùn)轉(zhuǎn),一些個(gè)人小網(wǎng)站沒什么反爬蟲措施可能因此癱瘓。而大網(wǎng)站一般會(huì)限制你的訪問頻率,因?yàn)檎H耸遣粫?huì)在 1s 內(nèi)訪問幾十次甚至上百次網(wǎng)站的。所以,如果你訪問過于頻繁,即使改了 user-agent 偽裝成瀏覽器了,也還是會(huì)被識(shí)別為爬蟲,并限制你的 IP 訪問該網(wǎng)站。

因此,我們常常使用 time.sleep() 來降低訪問的頻率,比如上一篇博客中的爬取整個(gè)網(wǎng)站的代碼,我們每爬取一個(gè)網(wǎng)頁就暫停一秒。

import requestsimport timefrom bs4 import BeautifulSoup

# 將獲取豆瓣電影數(shù)據(jù)的代碼封裝成函數(shù)def get_douban_movie(url):# 設(shè)置反爬蟲的請(qǐng)求頭 headers = {‘user-agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36’ }

# 請(qǐng)求網(wǎng)站的連接 res = requests.get(‘https://movie.douban.com/top250’, headers=headers)# 將網(wǎng)站數(shù)據(jù)存到BeautifulSoup對(duì)象中 soup = BeautifulSoup(res.text,‘html.parser’)# 爬取網(wǎng)站中所有標(biāo)簽為‘div’,并且class=‘pl2’的數(shù)據(jù)存到Tag對(duì)象中 items = soup.find_all(‘div’, class_=‘hd’)for i in items:# 再篩選出所有標(biāo)簽為a的數(shù)據(jù) tag = i.find(‘a(chǎn)’)# 只讀取第一個(gè)class=‘title’作為電影名 name = tag.find(class_=‘title’).text# 爬取書名對(duì)應(yīng)的網(wǎng)址 link = tag[‘href’] print(name,link)

url = ‘https://movie.douban.com/top250?start={}&filter=’# 將所有網(wǎng)址信息存到列表中urls = [url.format(num*25) for num in range(10)]for item in urls: get_douban_movie(item)# 暫停 1 秒防止訪問太快被封 time.sleep(1)

至此兩種比較簡(jiǎn)單的應(yīng)對(duì)反爬蟲方法就講完啦,希望能對(duì)大家有所幫助,如果有問題,請(qǐng)及時(shí)給予我指正,感激不盡!

原文鏈接:https://blog.csdn.net/qq_41564422/article/details/104212511

(版權(quán)歸原作者所有,侵刪)

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 爬蟲
    +關(guān)注

    關(guān)注

    0

    文章

    82

    瀏覽量

    6957

原文標(biāo)題:詳解python 破解網(wǎng)站反爬蟲的兩種簡(jiǎn)單方法

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AMC1204有兩種封裝,SOIC-8和SOIC-16,功能一樣嗎?為什么要推出兩種封裝?

    呢?AMC1204,AMC1304這樣做有什么好處嗎? 2、AMC1204有兩種封裝,SOIC-8和SOIC-16,功能一樣嗎?為什么要推出兩種封裝?
    發(fā)表于 12-27 07:22

    IP地址數(shù)據(jù)信息和爬蟲攔截的關(guān)聯(lián)

    IP地址數(shù)據(jù)信息和爬蟲攔截的關(guān)聯(lián)主要涉及到方面的內(nèi)容,也就是數(shù)據(jù)信息和爬蟲。IP 地址數(shù)據(jù)信息的內(nèi)容豐富,包括所屬地域、所屬網(wǎng)絡(luò)運(yùn)營商、訪問時(shí)間序列、訪問頻率等。 從IP地址信息中可以窺見
    的頭像 發(fā)表于 12-23 10:13 ?80次閱讀

    常見人體姿態(tài)評(píng)估顯示方式的兩種方式

    人體姿態(tài)評(píng)估中有兩種常見的顯示方式,分別是火柴人效果與BodyPix效果。其中火柴人效果本質(zhì)就是基于關(guān)鍵點(diǎn)的深度學(xué)習(xí)模型推理以后的顯示效果;Bodypix本質(zhì)就就是語義分割模型
    的頭像 發(fā)表于 11-11 11:21 ?263次閱讀
    <b class='flag-5'>常見</b>人體姿態(tài)評(píng)估顯示方式的<b class='flag-5'>兩種</b>方式

    噪聲傳導(dǎo)的兩種模式

    噪聲傳導(dǎo)有兩種模式,一為差模傳導(dǎo),一為共模傳導(dǎo)。
    的頭像 發(fā)表于 10-15 11:33 ?347次閱讀
    噪聲傳導(dǎo)的<b class='flag-5'>兩種</b>模式

    基于GPU器件行為的創(chuàng)新分布式功能安全機(jī)制為智能駕駛保駕護(hù)航

    在鎖步和重復(fù)校驗(yàn)兩種常見的功能安全機(jī)制之外,全球領(lǐng)先的GPU IP廠商Imagination帶來一全新的、高性價(jià)比的分布式功能安全機(jī)制
    的頭像 發(fā)表于 10-11 13:14 ?281次閱讀
    基于GPU器件行為的創(chuàng)新分布式功能安全<b class='flag-5'>機(jī)制</b>為智能駕駛保駕護(hù)航

    Linux應(yīng)用層控制外設(shè)的兩種不同的方式

    眾所周知,linux下一切皆文件,那么應(yīng)用層如何控制硬件層,同樣是通過 文件I/O的方式來實(shí)現(xiàn)的,那么應(yīng)用層控制硬件層通常有兩種方式。
    的頭像 發(fā)表于 10-05 19:03 ?646次閱讀
    Linux應(yīng)用層控制外設(shè)的<b class='flag-5'>兩種</b>不同的方式

    兩種常見的硬件消抖實(shí)現(xiàn)方式

    由于機(jī)械按鍵在操作過程中會(huì)產(chǎn)生抖動(dòng)現(xiàn)象,這種抖動(dòng)信號(hào)如果不加以處理,就可能導(dǎo)致單片機(jī)等電子設(shè)備誤判按鍵狀態(tài),從而引發(fā)錯(cuò)誤操作。本文將詳細(xì)介紹兩種常見的硬件消抖實(shí)現(xiàn)方式:RS觸發(fā)器和電容濾波。 RS
    的頭像 發(fā)表于 09-25 16:54 ?1578次閱讀
    <b class='flag-5'>兩種</b><b class='flag-5'>常見</b>的硬件消抖實(shí)現(xiàn)方式

    晶閘管的阻斷狀態(tài)有兩種是什么

    晶閘管(Thyristor)是一半導(dǎo)體器件,具有單向?qū)щ娦?,廣泛應(yīng)用于電力電子領(lǐng)域。晶閘管的阻斷狀態(tài)有兩種:正向阻斷狀態(tài)和反向阻斷狀態(tài)。以下是對(duì)這兩種阻斷狀態(tài)的分析。 正向阻斷狀態(tài) 正向阻斷狀態(tài)
    的頭像 發(fā)表于 08-14 16:49 ?813次閱讀

    wdm設(shè)備的兩種傳輸方式

    系統(tǒng)中,有多種傳輸方式,其中最常見兩種是密集波分復(fù)用(DWDM)和粗波分復(fù)用(CWDM)。 1. 密集波分復(fù)用(DWDM) 1.1 DWDM技術(shù)原理 密集波分復(fù)用(Dense Wavelength Division Multiplexing,簡(jiǎn)稱DWDM)是一
    的頭像 發(fā)表于 07-18 09:45 ?528次閱讀

    三相負(fù)載的連接方式有哪兩種

    三相負(fù)載的連接方式主要有星形連接(Y連接)和三角形連接(Δ連接)兩種。這兩種連接方式在電氣工程中非常常見,它們各自具有不同的特性和應(yīng)用場(chǎng)景。下面將介紹這兩種連接方式的原理、特點(diǎn)、應(yīng)用以
    的頭像 發(fā)表于 07-17 10:33 ?5185次閱讀

    PCBA加工中常見兩種焊接方式詳解

    ,在PCBA行業(yè)中經(jīng)常被使用。接下來深圳PCBA加工廠家為大家詳細(xì)介紹PCBA加工手工焊接的兩種方式,為您揭秘行業(yè)內(nèi)的技術(shù)細(xì)節(jié)。 PCBA加工過程中常用焊接方式 第一方式是傳統(tǒng)手工焊接。這種方式主要依靠技術(shù)工人的手動(dòng)操作進(jìn)行焊接。工人需事先準(zhǔn)備好所需的焊
    的頭像 發(fā)表于 06-14 09:18 ?596次閱讀

    充電樁為什么有直流與交流兩種接口?

    充電樁設(shè)計(jì)有直流(DC)和交流(AC)兩種接口,主要是為了適應(yīng)不同類型的電動(dòng)汽車(EV)充電需求以及電池的充電特性。
    的頭像 發(fā)表于 04-30 15:33 ?1746次閱讀

    GYFTA、GYFTY兩種光纜的區(qū)別

    GYFTA和GYFTY兩種光纜的區(qū)別主要在于它們的結(jié)構(gòu)和應(yīng)用場(chǎng)景。 GYFTA光纜是一室外非金屬加強(qiáng)芯松套管層絞聚乙烯粘連鋁帶護(hù)套光纜。這種光纜的結(jié)構(gòu)特點(diǎn)是它使用了非金屬加強(qiáng)芯,并且光纜的外護(hù)套
    的頭像 發(fā)表于 03-26 10:26 ?2148次閱讀

    異或門兩種常見的實(shí)現(xiàn)方式

    兩種實(shí)現(xiàn)方式都能夠?qū)崿F(xiàn)異或門的功能,具體的選擇取決于設(shè)計(jì)需求和邏輯門的可用性。實(shí)際構(gòu)建異或門時(shí),可以使用離散電子元件(如晶體管、二極管等)或整合電路芯片(如 TTL、CMOS 等)來實(shí)現(xiàn)。
    的頭像 發(fā)表于 02-04 17:30 ?1.3w次閱讀
    異或門<b class='flag-5'>兩種</b><b class='flag-5'>常見</b>的實(shí)現(xiàn)方式

    外部中斷有哪兩種觸發(fā)方式?如何選擇和設(shè)定?

    外部中斷有兩種觸發(fā)方式:電平觸發(fā)和邊沿觸發(fā)** 。
    的頭像 發(fā)表于 01-28 17:31 ?6563次閱讀
    外部中斷有哪<b class='flag-5'>兩種</b>觸發(fā)方式?如何選擇和設(shè)定?