欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解python 破解網(wǎng)站反爬蟲的兩種簡單方法

 更新時間:2020年02月09日 14:55:36   作者:DA1YuH  
這篇文章主要介紹了詳解python 破解網(wǎng)站反爬蟲的兩種簡單方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近在學(xué)爬蟲時發(fā)現(xiàn)許多網(wǎng)站都有自己的反爬蟲機(jī)制,這讓我們沒法直接對想要的數(shù)據(jù)進(jìn)行爬取,于是了解這種反爬蟲機(jī)制就會幫助我們找到解決方法。
常見的反爬蟲機(jī)制有判別身份和IP限制兩種,下面我們將一一來進(jìn)行介紹。

(一) 判別身份

首先我們看一個例子,看看到底什么時反爬蟲。
我們還是以 豆瓣電影榜top250(https://movie.douban.com/top250) 為例。`

import requests

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

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


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

首先得打開瀏覽器,隨便打開一個網(wǎng)站,再打開開發(fā)者工具。
再點(diǎn)擊network標(biāo)簽,接著點(diǎn)第一個請求,再找到Request Headers,最后找到user-agent字段。(有時候可能點(diǎn)擊network標(biāo)簽后是空白得,這時候刷新下網(wǎng)頁就好啦!)


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

import requests

# 復(fù)制剛才獲取得請求頭
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'
# 請求與網(wǎng)站的連接
res = requests.get(url, headers=headers)
# 打印獲取的文本
print(res.text)

現(xiàn)在我們再來看部分輸出結(jié)果。


我們可以發(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)簽。它就像我們身份證號一樣,只要知道你的身份證號就能查出你是哪個人。
當(dāng)我們爬取大量數(shù)據(jù)時,如果我們不加以節(jié)制地訪問目標(biāo)網(wǎng)站,會使網(wǎng)站超負(fù)荷運(yùn)轉(zhuǎn),一些個人小網(wǎng)站沒什么反爬蟲措施可能因此癱瘓。而大網(wǎng)站一般會限制你的訪問頻率,因?yàn)檎H耸遣粫?1s 內(nèi)訪問幾十次甚至上百次網(wǎng)站的。所以,如果你訪問過于頻繁,即使改了 user-agent 偽裝成瀏覽器了,也還是會被識別為爬蟲,并限制你的 IP 訪問該網(wǎng)站。
因此,我們常常使用 time.sleep() 來降低訪問的頻率,比如上一篇博客中的爬取整個網(wǎng)站的代碼,我們每爬取一個網(wǎng)頁就暫停一秒。

import requests
import time
from bs4 import BeautifulSoup

# 將獲取豆瓣電影數(shù)據(jù)的代碼封裝成函數(shù)
def get_douban_movie(url):
 # 設(shè)置反爬蟲的請求頭
 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'
 }

 # 請求網(wǎng)站的連接
 res = requests.get('https://movie.douban.com/top250', headers=headers)
 # 將網(wǎng)站數(shù)據(jù)存到BeautifulSoup對象中
 soup = BeautifulSoup(res.text,'html.parser')
 # 爬取網(wǎng)站中所有標(biāo)簽為'div',并且class='pl2'的數(shù)據(jù)存到Tag對象中
 items = soup.find_all('div', class_='hd')
 for i in items:
  # 再篩選出所有標(biāo)簽為a的數(shù)據(jù)
  tag = i.find('a')
  # 只讀取第一個class='title'作為電影名
  name = tag.find(class_='title').text
  # 爬取書名對應(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)

部分運(yùn)行結(jié)果:


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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Python中操作時間之mktime()方法的使用教程

    在Python中操作時間之mktime()方法的使用教程

    這篇文章主要介紹了在Python中操作時間之mktime()方法的使用教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 在python中修改.properties文件的操作

    在python中修改.properties文件的操作

    這篇文章主要介紹了在python中修改.properties文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python的joblib模型固化函數(shù)解析

    Python的joblib模型固化函數(shù)解析

    這篇文章主要介紹了Python的joblib模型固化函數(shù)解析,joblib提供了三個與對象序列化和模型固化相關(guān)的函數(shù)hash,dump,load,joblib.hash主要是為了提供一個numpy對象的hash方法,需要的朋友可以參考下
    2023-08-08
  • python pdb調(diào)試方法分享

    python pdb調(diào)試方法分享

    在交互環(huán)境中通常使用pdb.run來調(diào)試,下面學(xué)習(xí)一下使用方法,大家參考使用吧
    2014-01-01
  • Python+Tkinter實(shí)現(xiàn)簡單的畫圖軟件

    Python+Tkinter實(shí)現(xiàn)簡單的畫圖軟件

    這篇文章主要為大家詳細(xì)介紹了如何利用Python和Tkinter實(shí)現(xiàn)編寫一個簡單的畫圖軟件,可以實(shí)現(xiàn)畫圖、保存、撤銷等功能,感興趣的可以了解一下
    2023-04-04
  • python中NumPy的安裝與基本操作

    python中NumPy的安裝與基本操作

    Python雖然也提供了array模塊,但其只支持一維數(shù)組,不支持多維數(shù)組,也沒有各種運(yùn)算函數(shù),因而不適合數(shù)值運(yùn)算,NumPy的出現(xiàn)彌補(bǔ)了這些不足,這篇文章主要給大家介紹了關(guān)于python中NumPy的安裝與基本操作的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 使用numpy和PIL進(jìn)行簡單的圖像處理方法

    使用numpy和PIL進(jìn)行簡單的圖像處理方法

    今天小編就為大家分享一篇使用numpy和PIL進(jìn)行簡單的圖像處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python中請不要再用re.compile了

    Python中請不要再用re.compile了

    這篇文章主要給大家介紹了關(guān)于Python中為何不要再用re.compile的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python 實(shí)現(xiàn)12306登錄功能實(shí)例代碼

    Python 實(shí)現(xiàn)12306登錄功能實(shí)例代碼

    這篇文章主要介紹了Python 實(shí)現(xiàn)12306登錄功能的完整代碼,需要的朋友可以參考下
    2018-02-02
  • Python輕量級搜索工具Whoosh的使用教程

    Python輕量級搜索工具Whoosh的使用教程

    本文將為大家簡單介紹一下Python中的一個輕量級搜索工具Whoosh,并給出相應(yīng)的使用示例代碼,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07

最新評論