1. 程式人生 > 程式設計 >python實現三種隨機請求頭方式

python實現三種隨機請求頭方式

相信大家在爬蟲中都設定過請求頭 user-agent 這個引數吧? 在請求的時候,加入這個引數,就可以一定程度的偽裝成瀏覽器,就不會被伺服器直接識別為spider.demo.code ,據我瞭解的,我很多讀者每次都是直接從network 中去複製 user-agent 然後把他貼上到程式碼中, 這樣獲取的user-agent 沒有錯,可以用, 但是如果網站反爬措施強一點,用固定的請求頭可能就有點問題, 所以我們就需要設定一個隨機請求頭,在這裡,我分享一下我自己一般用的三種設定隨機請求頭方式

思路介紹:

其實要達到隨機的效果,很大程度上我們可以利用隨機函式庫random 這個來實現,可以呼叫random.choice([user-agent])

隨機pick陣列中一個就可以了,這是我的一種方式。

python作為一個擁有眾多第三方包的語言,自然就有可以生成隨機請求頭的包咯,沒錯,就是fake-useragent 這個第三方庫了,稍後我們介紹一下這個函式庫的簡單使用。

既然別人可以寫第三方庫,自然自己也可以實現一個這樣的功能,大部分情況下,我很多程式碼都是直接呼叫我自己實現的一個GetUserAgentCS 類,直接就可以獲取一個隨機請求頭了,直接寫函式庫,才牛逼舒服, 這個我也會在下面介紹如何編寫函式庫。

自己編寫第三方庫:

不知道你們寫程式碼的框架是怎樣的,面向過程還是面向物件? 對於一次性的程式碼,就簡單的編碼就行了,如果你覺得這個程式碼它可以會在很多的地方用得到,可以重複使用,那麼你就可以使用類的方式,去編寫這個程式碼,那麼在其他的檔案中,你就可以直接呼叫你的寫這個檔案,直接呼叫你寫的class類中的各種方法,而我也是這樣實現的一個隨機請求頭的一個第三方庫, 如下:

import random
import csv
class GetUserAgentCS(object):
  """
  呼叫本地請求標頭檔案, 返回請求頭
  """

  def __init__(self):
    with open('D://pyth//scrapy 專案//setting//useragent.csv','r') as fr:
      fr_csv = csv.reader(fr)
      self.user_agent = [str(i[1]) for i in fr_csv]

  def get_user(self):
    return random.choice(self.user_agent)

useragent檔案如下:

1,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.93 Safari/537.36"
2,Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/30.0.1599.17 Safari/537.36"
3,Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.116 Safari/537.36"
4,Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.116 Safari/537.36"
5,Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.93 Safari/537.36"
-------
------- # too much 
100...

程式碼很簡單的,讀取本地的csv檔案,然後random一個出去就行了,那現在就有人問我,你這個檔案怎麼來的,很簡單啊,自然就有方法了,待會在下一個模組我會講到,在這裡,我們只需要編寫一個GetUserAgentCS類就可以,程式碼可以直接抄我上面的,然後儲存為get_useragent.py 就可以了,然後你把這個包檔案放在你自己爬蟲資料夾的地方,然後這樣呼叫:

from get_useragent import GetUserAgentCS
headers = {}
ua = GetUserAgentCS().get_user()
headers['user-agent'] = ua
return headers

如果你在這個呼叫GetUserAgentCS 不成功, 或者底下會出現紅色的波浪線, 那麼就是你沒有設定當前工作環境,你只需要這麼設定(設定你的爬蟲資料夾):

在這裡插入圖片描述

你需要點選 Sources Root 就可以了!

使用第三方庫 fake-useragent:

這是一個別人已經寫好的第三方庫,你需要安裝然後呼叫API 就可以了, 它可以獲取各種的請求頭,唯一的缺點就是 請求不穩定,有的時候網路波動就可能導致獲取不成功,用於Scrapy中,不是很舒服,所以我在這個包的基礎上,編寫了如上我自己的包,至於請求頭的資料怎麼來的, 就是在這個包執行正常時候,一直更改user-agent,然後不斷的請求 http://httpbin.org/user-agent 然後不斷的儲存資料,寫入本地檔案就可以了。

我們還是講一講這個包的使用方式吧!

安裝

pip install fake-useragent

你可以 pip list 檢視一下 是否安裝成功

使用方式

from fake_useragent import UserAgent
headers= {'User-Agent':str(UserAgent().random)}
r = requests.get(url,headers=headers)
  • UserAgent().random 可以獲取任意瀏覽器的請求頭
  • UserAgent().Chrome 可以獲取谷歌瀏覽器的請求頭
  • UserAgent().firefox 可以獲取火狐瀏覽器的請求頭

這個時候,直接用random就可以了,簡單。

讀取記憶體陣列:

這個時候就有很多人說, 我就換個請求頭而已,需要這麼麻煩嗎? 當然,自然有簡單的方式,只不過每次都需要複製來用,不是很方法,具體如下:

ua = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.93 Safari/537.36"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/30.0.1599.17 Safari/537.36"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/27.0.1453.116 Safari/537.36"]

預先把請求頭放入數組裡面,然後用就可以了。

import random
ua = [.....]
r = requests.get(url,headers={"user-agent":random.choice(ua)})

以上就是我關於請求頭的幾種設定方式了,有需要補充的可以評論區留言。

教你用三種方式設定隨機請求頭, 爬蟲設定請求頭(user-agent)是必然的,那如何生成一個隨機請求頭這個也是我們爬蟲必須掌握的, 讀完本篇文章你就可以輕鬆掌握 !

到此這篇關於python實現三種隨機請求頭方式的文章就介紹到這了,更多相關python 隨機請求頭內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!