第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

爬蟲和反爬蟲

有的時候,當(dāng)我們的爬蟲程序完成了,并且在本地測試也沒有問題,爬取了一段時間之后突然就發(fā)現(xiàn)報錯無法抓取頁面內(nèi)容了。這個時候,我們很有可能是遇到了網(wǎng)站的反爬蟲攔截。

我們知道,網(wǎng)站一方面想要爬蟲爬取網(wǎng)站,比如讓搜索引擎爬蟲去爬取網(wǎng)站的內(nèi)容,來增加網(wǎng)站的搜索排名。另一方面,由于網(wǎng)站的服務(wù)器資源有限,過多的非真實的用戶對網(wǎng)站的大量訪問,會增加運營成本和服務(wù)器負(fù)擔(dān)。

因此,有些網(wǎng)站會設(shè)置一些反爬蟲的措施。我們只有認(rèn)識了主要的反爬蟲措施,才能識別反爬蟲措施,從而進(jìn)行反反爬蟲。當(dāng)然,從道德和法律的角度來講,開發(fā)者應(yīng)該把爬蟲控制在合理合法的用途上,切勿非法地使用爬蟲。如果,需要將爬取的內(nèi)容用作商業(yè)用途的時候,需要額外關(guān)注相應(yīng)網(wǎng)站對數(shù)據(jù)的聲明。

1. 反爬蟲常見方式:

  • 請求頭識別

這是一種最基本的反爬蟲方式,網(wǎng)站運營者通過驗證爬蟲的請求頭的 User-agent,accep-enconding 等信息來驗證請求的發(fā)出宿主是不是真實的用戶常用瀏覽器或者一些特定的請求頭信息。

  • 動態(tài)加載

通過 Ajax,或 者javascript 來動態(tài)獲取和加載數(shù)據(jù),加大爬蟲直接獲取數(shù)據(jù)的難度。

  • 驗證碼

這個相信大多數(shù)讀者非常熟悉了吧,當(dāng)我們輸錯多次密碼的時候,很多平臺都會彈出各種二維碼讓我們識別,或者搶火車票的時候,會出現(xiàn)各種復(fù)雜的驗證碼,驗證碼是反爬蟲措施中,運用最廣,同時也是最有效直接的方式來阻止爬蟲的措施之一。

  • 限制IP

在識別到某些異常的訪問的時候,網(wǎng)站運營者會設(shè)置一個黑名單,把一些判定為爬蟲的IP進(jìn)行限制或者封殺。

  • 賬號限制

有些網(wǎng)站,沒有游客模式,只有通過注冊后才可以登錄看到內(nèi)容,這個就是典型的使用賬號限制網(wǎng)站,一般可以用在網(wǎng)站用戶量不多,數(shù)據(jù)安全要求嚴(yán)格的網(wǎng)站中。

2. 反反爬蟲策略:

  • 更改 UserAgent

我們可以在請求頭中替換我們的請求媒介,讓網(wǎng)站誤認(rèn)為是我們是通過移動端的訪問,運行下面的代碼后,當(dāng)我們打開 hupu.html,我們會發(fā)現(xiàn)返回的是移動端的虎撲的頁面而不是網(wǎng)頁端的。

import requests
from bs4 import BeautifulSoup

header_data = {
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I535 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'}
re = requests.get('https://www.hupu.com/', headers=header_data)
bs = BeautifulSoup(re.content)
with open('hupu.html', 'wb') as f:
    f.write(bs.prettify(encoding='utf8'))
  • 減少爬取頻率,設(shè)置間隔時間

比如,我們可以設(shè)置一個隨機(jī)的間隔時間,來模擬用戶的行為,減少訪問的次數(shù)和頻率。
我們可以在我們爬蟲的程序中,加入如下的代碼,讓爬蟲休息3秒左右,再進(jìn)行爬取,可以有效地避開網(wǎng)站的對爬蟲的檢測和識別。

import time
import random

sleep_time = random.randint(0.,2) + random.random()
time.sleep(sleep_time)
  • 運用代理機(jī)制

代理就是通過訪問第三方的機(jī)器,然后通過第三方機(jī)器的 IP 進(jìn)行訪問,來隱藏自己的真實IP地址。

import requests

link = "http://www.baidu.com/"
proxies = {'http':'XXXXXXXXXXX'} //代理地址,可以自己上網(wǎng)查找,這里就不做推薦了
response = requests.get(link, proxies=proxies)

由于第三方代理良莠不齊,而且不穩(wěn)定,經(jīng)常出現(xiàn)斷線的情況,爬取速度也會慢許多,如果對爬蟲質(zhì)量有嚴(yán)格要求的話,不建議使用此種方法進(jìn)行爬取。

  • 變換IP進(jìn)行爬取

可以通過動態(tài)的 IP 撥號服務(wù)器來變換 IP,也可以通過 Tor 代理服務(wù)器來變換 IP。

小結(jié)

反反爬蟲的策略,一直是在變換的,我們應(yīng)該具體問題具體分析,通過不斷的試錯來完善我們的爬蟲爬取,千萬不要以為,爬蟲程序在本機(jī)調(diào)試之后,沒有問題,就可以高枕無憂了。線上的問題,總是千變?nèi)f化,我們需要根據(jù)我們的具體反爬措施,來針對的寫一些反反爬蟲的代碼,這樣才能保證線上環(huán)境的萬無一失。