python實(shí)現(xiàn)三種隨機(jī)請求頭方式
相信大家在爬蟲中都設(shè)置過請求頭 user-agent
這個參數(shù)吧? 在請求的時候,加入這個參數(shù),就可以一定程度的偽裝成瀏覽器,就不會被服務(wù)器直接識別為spider.demo.code
,據(jù)我了解的,我很多讀者每次都是直接從network
中去復(fù)制 user-agent
然后把他粘貼到代碼中, 這樣獲取的user-agent
沒有錯,可以用, 但是如果網(wǎng)站反爬措施強(qiáng)一點(diǎn),用固定的請求頭可能就有點(diǎn)問題, 所以我們就需要設(shè)置一個隨機(jī)請求頭,在這里,我分享一下我自己一般用的三種設(shè)置隨機(jī)請求頭方式
思路介紹:
其實(shí)要達(dá)到隨機(jī)的效果,很大程度上我們可以利用隨機(jī)函數(shù)庫random
這個來實(shí)現(xiàn),可以調(diào)用random.choice([user-agent])
隨機(jī)pick數(shù)組中一個就可以了,這是我的一種方式。
python作為一個擁有眾多第三方包的語言,自然就有可以生成隨機(jī)請求頭的包咯,沒錯,就是fake-useragent
這個第三方庫了,稍后我們介紹一下這個函數(shù)庫的簡單使用。
既然別人可以寫第三方庫,自然自己也可以實(shí)現(xiàn)一個這樣的功能,大部分情況下,我很多代碼都是直接調(diào)用我自己實(shí)現(xiàn)的一個GetUserAgentCS
類,直接就可以獲取一個隨機(jī)請求頭了,直接寫函數(shù)庫,才牛舒服, 這個我也會在下面介紹如何編寫函數(shù)庫。
自己編寫第三方庫:
不知道你們寫代碼的框架是怎樣的,面向過程還是面向?qū)ο螅?對于一次性的代碼,就簡單的編碼就行了,如果你覺得這個代碼它可以會在很多的地方用得到,可以重復(fù)使用,那么你就可以使用類的方式,去編寫這個代碼,那么在其他的文件中,你就可以直接調(diào)用你的寫這個文件,直接調(diào)用你寫的class類中的各種方法,而我也是這樣實(shí)現(xiàn)的一個隨機(jī)請求頭的一個第三方庫, 如下:
import random import csv class GetUserAgentCS(object): """ 調(diào)用本地請求頭文件, 返回請求頭 """ def __init__(self): with open('D://pyth//scrapy 項(xiàng)目//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 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36" 4,"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 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36" 5,"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 (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一個出去就行了,那現(xiàn)在就有人問我,你這個文件怎么來的, 很簡單啊,自然就有方法了,待會在下一個模塊我會講到,在這里,我們只需要編寫一個GetUserAgentCS
類就可以,代碼可以直接抄我上面的,然后保存為get_useragent.py
就可以了,然后你把這個包文件放在你自己爬蟲文件夾的地方,然后這樣調(diào)用:
from get_useragent import GetUserAgentCS headers = {} ua = GetUserAgentCS().get_user() headers['user-agent'] = ua return headers
如果你在這個調(diào)用GetUserAgentCS
不成功, 或者底下會出現(xiàn)紅色的波浪線, 那么就是你沒有設(shè)置當(dāng)前工作環(huán)境,你只需要這么設(shè)置(設(shè)置你的爬蟲文件夾):
你需要點(diǎn)擊 Sources Root
就可以了!
使用第三方庫 fake-useragent:
這是一個別人已經(jīng)寫好的第三方庫,你需要安裝然后調(diào)用API 就可以了, 它可以獲取各種的請求頭,唯一的缺點(diǎn)就是 請求不穩(wěn)定,有的時候網(wǎng)絡(luò)波動就可能導(dǎo)致獲取不成功,用于Scrapy中,不是很舒服,所以我在這個包的基礎(chǔ)上,編寫了如上我自己的包,至于請求頭的數(shù)據(jù)怎么來的, 就是在這個包運(yùn)行正常時候,一直更改user-agent
,然后不斷的請求 http://httpbin.org/user-agent
然后不斷的保存數(shù)據(jù),寫入本地文件就可以了。
我們還是講一講這個包的使用方式吧!
安裝
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就可以了,簡單。
讀取內(nèi)存數(shù)組:
這個時候就有很多人說, 我就換個請求頭而已,需要這么麻煩嗎? 當(dāng)然,自然有簡單的方式,只不過每次都需要復(fù)制來用,不是很方法,具體如下:
ua = ["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" "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.2; WOW64) 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/81.0.4044.129 Safari/537.36,Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"]
預(yù)先把請求頭放入數(shù)組里面,然后用就可以了。
import random ua = [.....] r = requests.get(url, headers={"user-agent":random.choice(ua)})
以上就是我關(guān)于請求頭的幾種設(shè)置方式了,有需要補(bǔ)充的可以評論區(qū)留言。
教你用三種方式設(shè)置隨機(jī)請求頭, 爬蟲設(shè)置請求頭(user-agent)是必然的,那如何生成一個隨機(jī)請求頭這個也是我們爬蟲必須掌握的, 讀完本篇文章你就可以輕松掌握 !
到此這篇關(guān)于python實(shí)現(xiàn)三種隨機(jī)請求頭方式的文章就介紹到這了,更多相關(guān)python 隨機(jī)請求頭內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python獲取當(dāng)前時間日期的方法總結(jié)
在Python編程中,獲取當(dāng)前的日期和時間是一個常見的需求,它在許多應(yīng)用中都有重要作用,本文為大家詳細(xì)整理了一些Python中的常用方法,希望對大家有所幫助2024-01-01DJango的創(chuàng)建和使用詳解(默認(rèn)數(shù)據(jù)庫sqlite3)
今天小編就為大家分享一篇DJango的創(chuàng)建和使用詳解(默認(rèn)數(shù)據(jù)庫sqlite3),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11c++生成dll使用python調(diào)用dll的方法
這篇文章主要介紹了使用c++為python寫dll庫的方法,開發(fā)環(huán)境是VS2013+Python3.3,vs2013寫cpp的dll擴(kuò)展,然后用python3.3解釋執(zhí)行。下面看詳細(xì)步驟吧2014-01-01Python控制臺輸出時刷新當(dāng)前行內(nèi)容而不是輸出新行的實(shí)現(xiàn)
今天小編就為大家分享一篇Python控制臺輸出時刷新當(dāng)前行內(nèi)容而不是輸出新行的實(shí)現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python?Web?App開發(fā)Dockerfiles編寫示例
這篇文章主要為大家介紹了Python?Web?App編寫Dockerfiles的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python實(shí)現(xiàn)用networkx繪制MultiDiGraph
這篇文章主要介紹了Python實(shí)現(xiàn)用networkx繪制MultiDiGraph方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02python讀寫Excel表格的實(shí)例代碼(簡單實(shí)用)
這篇文章主要介紹了python讀寫Excel表格的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12