python爬蟲(chóng)爬取網(wǎng)站內(nèi)容時(shí)械馆,如果什么也沒(méi)帶刘莹,即不帶報(bào)頭headers用含,往往會(huì)被網(wǎng)站管理維護(hù)人員認(rèn)定為機(jī)器爬蟲(chóng)盾鳞。因?yàn)榈春藭r(shí)python默認(rèn)的user-agent如Python-urllib/2.1一樣诗茎。因此搏熄,網(wǎng)站管理人員會(huì)根據(jù)請(qǐng)求的user-agent判定你是不是機(jī)器爬蟲(chóng)晦毙。所以谱秽,此時(shí)往往就需要偽裝user-agent洽蛀,模擬成真實(shí)的瀏覽器去取出內(nèi)容。
一般主要應(yīng)用Chrome或者Firefox疟赊,爬蟲(chóng)應(yīng)用的時(shí)候郊供,可以把他們都放到列表里面。然后import random近哟,使用random.choice(list)隨機(jī)獲取一個(gè)user-agent驮审。
不過(guò)呢,現(xiàn)在我要介紹一個(gè)python里面更為牛逼的方法(噓吉执,一般人我不告訴他)——fake-useragent
這是python里面的一個(gè)useragent池疯淫,非常好用!具體怎么用呢戳玫?
首先熙掺,安裝fake-useragent
????pip? install? fake-useragent
然后,使用方法:
from? fake_useragent? ?import? UserAgent
ua = UserAgent()
headers = {'User-Agent':ua.random}
注意咕宿,有些網(wǎng)站可能會(huì)根據(jù)user-agent來(lái)封IP适掰,也就是說(shuō)他們會(huì)根據(jù)同一個(gè)IP下,如果是很多個(gè)不同user-agent在訪問(wèn)荠列,那么类浪,此時(shí),他們就會(huì)判定為爬蟲(chóng)肌似!?
錯(cuò)誤類(lèi)型
在爬蟲(chóng)中報(bào)如下的錯(cuò)誤:
requests.exceptions.ConnectionError: (‘Connection aborted.’, RemoteDisconnected(‘Remote end closed connection without response’,))
解決方法
(1)隨機(jī)切換User-Agent:
user_agent_list = ["Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
? ? ? ? ? ? ? ? ? ? "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
? ? ? ? ? ? ? ? ? ? "Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/61.0",
? ? ? ? ? ? ? ? ? ? "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
? ? ? ? ? ? ? ? ? ? "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
? ? ? ? ? ? ? ? ? ? "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
? ? ? ? ? ? ? ? ? ? "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
? ? ? ? ? ? ? ? ? ? "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
? ? ? ? ? ? ? ? ? ? ]
? ? ? ? ? ? ? ? headers['User-Agent'] = random.choice(user_agent_list)
(2)訪問(wèn)頻率的設(shè)置:?
time.sleep(6) #測(cè)試一下费就,如果是與訪問(wèn)頻率有關(guān)可設(shè)置時(shí)間長(zhǎng)一點(diǎn)?
(3)使用代理ip:
self.proxies = {
? ? ? ? ? ? "http": ip,
? ? ? ? ? ? "https":ip,
? ? ? ? }